BEFORE INSERT触发器中INSERT缺失列的值是多少?

时间:2015-10-18 11:07:26

标签: mysql triggers sql-insert

考虑下表

CREATE TABLE position (x INTEGER, y INTEGER, z INTEGER);

现在进行以下查询

INSERT INTO position (x, y) VALUES (1, 2);

问题: - 此查询的z触发器中BEFORE INSERT的值是多少?

1 个答案:

答案 0 :(得分:0)

快速演示:z的值为NULL

SqlFiddleDemo

CREATE TABLE position (x INTEGER, y INTEGER, z INTEGER);
CREATE TABLE position_temp (x INTEGER, y INTEGER, z INTEGER);

CREATE TRIGGER testref BEFORE INSERT ON position
  FOR EACH ROW
  BEGIN
    INSERT INTO position_temp(x, y, z) 
    VALUES (NEW.x, NEW.y, NEW.z);
  END;

INSERT INTO position (x, y) VALUES (1, 2);

如果表格有DEFAULT之类的话:

CREATE TABLE position (x INTEGER, y INTEGER, z INTEGER DEFAULT 5);

你会得到z = 5.

SqlFiddleDemo2

documentation中的更多信息。你应该注意AUTO_INCREMENT

  

在BEFORE触发器中,AUTO_INCREMENT列的NEW值为0,   不是新的时候自动生成的序列号   实际插入了行。