gpt4 book ai didi

mysql - BEFORE INSERT 触发器的不可预测的行为

转载 作者:行者123 更新时间:2023-11-29 06:42:19 25 4
gpt4 key购买 nike

我正在使用 MySQL 5.1 编写插入前触发器。为此,我想检查 receipt_no 列,如果 receipt_no 已经在表中,则递增 version_no

而且我假设如果没有使用 SELECT INTO 放置行,则此触发器失败,这正是我想要的,因此列上具有 default 0 默认值的表通过.

但是版本号似乎重复了。这里的问题似乎是什么?

表格布局的形式:

`id - 自动增加主键

receipt_no - 唯一约束 |

version_no - 唯一约束 |

其他不相关的列`

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到version,NULL + 1给出NULL。
您需要检查 version 是否为 null。
在查询中也使用 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

查看此演示:http://www.sqlfiddle.com/#!2/b82c34/1

关于mysql - BEFORE INSERT 触发器的不可预测的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20747586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com