在插入trrigger之前在mysql中使用子查询

时间:2016-02-21 18:03:19

标签: mysql

我有一个带有双组件键的表,其中第一个组件是来自相关表的给定id,第二个组件是序号,以使主键唯一。表格的一个简单示例:

CREATE TABLE a_tbl (
    id INT,
    seq_num INT,
    primary key (id, seq_num)
);

现在,MySQL中的InnoDB引擎只允许在多元素主键的第一个元素上自动递增。因此,我认为我可以通过BEFORE INSERT触发器轻松处理第二个元素的赋值,但事实证明它不起作用。

我已尝试过多种方式,但无法让MySQL接受语法,并且没有解释SQL代码有什么问题。希望有人可以解决问题所在以及如何使代码工作。这是SQL触发器代码:

CREATE TRIGGER a_tbl_BEFORE_INSERT
BEFORE INSERT ON a_tbl
FOR EACH ROW BEGIN
    SET NEW.seq_num = 1 + (SELECT MAX(COALESCE(seq_num, 0))
                        FROM a_tbl
                        WHERE id = NEW.id
                        );
END

1 个答案:

答案 0 :(得分:0)

使用delimiter

delimiter |
CREATE TRIGGER a_tbl_BEFORE_INSERT
BEFORE INSERT ON a_tbl
FOR EACH ROW BEGIN
    SET NEW.seq_num = 1 + coalesce((SELECT MAX(seq_num) FROM a_tbl WHERE id = NEW.id), 0);
END
|
delimiter