BEFORE INSERT触发器中INSERT的缺失列的值是什么?

问题描述:

下表BEFORE INSERT触发器中INSERT的缺失列的值是什么?

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

现在考虑下面的查询

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

问题:–什么是z一个BEFORE INSERT触发此查询里面的价值?

+0

z将有'NULL' – lad2025

+0

@ lad2025是否有保证?如果你可以请给我一个链接到一个文件,这是详细解释我会很感激。 –

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

SqlFiddleDemo2documentation

更多信息。你应该注意AUTO_INCREMENT

在BEFORE触发器,对于AUTO_INCREMENT列的新值是0, 实际上没有插入新 行时自动生成的序列号。

+0

仅供参考:我不得不在列中添加'DEFAULT NULL',现在让我认为我的问题很愚蠢。 –