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
:
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。
更多信息见 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.
考虑以下 table
CREATE TABLE position (x INTEGER, y INTEGER, z INTEGER);
现在进行以下查询
INSERT INTO position (x, y) VALUES (1, 2);
问题:– 此查询的 BEFORE INSERT
触发器中 z
的值是多少?
快速演示:z 的值为 NULL
:
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。
更多信息见 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.