【问题标题】:What is the value of a missing column of an INSERT in a BEFORE INSERT Trigger?BEFORE INSERT 触发器中 INSERT 的缺失列的值是多少?
【发布时间】:2015-10-18 11:07:25
【问题描述】:

考虑下表

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

现在是下面的查询

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

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

【问题讨论】:

  • @lad2025 有保证吗?如果可以的话,请给我一个文档的链接,其中详细解释了这一点,我将不胜感激。

标签: mysql triggers sql-insert


【解决方案1】:

快速演示: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 列的新值为 0, 不是新建时自动生成的序号 行实际上已插入。

【讨论】:

  • 仅供参考:我不得不在专栏中添加DEFAULT NULL,这让我觉得我的问题很愚蠢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2014-05-08
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多