Mysql 插入前触发器的不可预测行为
我正在使用MySQL 5.1编写一个Before Insert触发器。为此,我想检查Mysql 插入前触发器的不可预测行为,mysql,triggers,Mysql,Triggers,我正在使用MySQL 5.1编写一个Before Insert触发器。为此,我想检查收据编号列,如果收据编号已在表中,则增加版本编号 我假设如果使用SELECT-INTO未放置任何行,则此触发器将失败,这正是我想要的,因此列上具有default 0默认值的表将通过 但是版本号似乎被复制了。这里的问题是什么 表格布局的形式如下: `id-自动递增主键 收据号-唯一约束 版本号-唯一约束| 其他不相关列` CREATE TRIGGER `increment_version` BEFORE INSER
收据编号
列,如果收据编号
已在表中,则增加版本编号
我假设如果使用SELECT-INTO
未放置任何行,则此触发器将失败,这正是我想要的,因此列上具有default 0
默认值的表将通过
但是版本号似乎被复制了。这里的问题是什么
表格布局的形式如下:
`id-自动递增主键
收据号-唯一约束
版本号-唯一约束|
其他不相关列`
CREATE TRIGGER `increment_version` BEFORE INSERT ON `my_table` FOR EACH ROW BEGIN
DECLARE version INTEGER;
SELECT version_no INTO version FROM my_table WHERE receipt_no = NEW.receipt_no LIMIT 1;
SET NEW.version_no = version + 1;
END
如果没有记录,则查询将null返回到
版本
,null+1给出null。您需要检查
version
是否为空。在查询中也使用MAX,因为您需要检索最大版本号
CREATE TRIGGER `increment_version`
BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
DECLARE version INTEGER;
SELECT max(version_no) INTO version FROM my_table
WHERE receipt_no = NEW.receipt_no
;
IF version IS NOT NULL THEN
SET NEW.version_no = version + 1;
END IF;
END
请参阅此演示:您应该检查版本是否为空,然后如果为空则结束;谢谢你的回复。假设触发器抛出错误,并在没有行的情况下退出。很高兴知道空值。