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

What is the value of a missing column of an INSERT in a BEFORE INSERT Trigger?

考虑以下 table

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

现在进行以下查询

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

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

快速演示: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);

如果table有DEFAULT喜欢:

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

你会得到 z = 5。

SqlFiddleDemo2

更多信息见 documentation。你应该注意 AUTO_INCREMENT:

In a BEFORE trigger, the NEW value for an AUTO_INCREMENT column is 0, not the sequence number that is generated automatically when the new row actually is inserted.