我使用MySQL 5.1编写Before Insert触发器。为此,我想检查receipt_no
列,如果表中已有version_no
,则增加receipt_no
。
我假设如果没有使用SELECT INTO
放置任何行,则此触发器失败,这就是我想要的,因此列上具有default 0
默认值的表就会出现。
但版本似乎没有重复。这里看起来像什么问题?
表格布局的形式如下:
`id - auto incr主键
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
答案 0 :(得分:2)
如果没有记录,则查询返回null到version
,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