使用mysql触发器更新复合主键的部分字段

使用mysql触发器更新复合主键的部分字段,mysql,triggers,composite-primary-key,Mysql,Triggers,Composite Primary Key,我是mysql触发器的新手,我正试图弄清楚如何为下面的情况创建触发器 我有一个具有以下结构的表: CREATE TABLE `trigger` ( `group` int(3) NOT NULL, `order` int(3) NOT NULL, `name` varchar(100) NOT NULL, PRIMARY KEY (`group`,`order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 以下是使用一些示例数据时表格的外观:

我是mysql触发器的新手,我正试图弄清楚如何为下面的情况创建触发器

我有一个具有以下结构的表:

CREATE TABLE `trigger` (
  `group` int(3) NOT NULL,
  `order` int(3) NOT NULL,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`group`,`order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以下是使用一些示例数据时表格的外观:

我要创建的触发器应该确保,对于使用给定组添加的每个新记录,order字段都会使用正确的order索引进行更新


因此,如果我要在组1中添加一条新记录,order字段将自动更新为下一个order,对于给定的示例,它将是4。

触发器中的以下语句应该可以做到这一点

DECLARE neworder INTEGER;
SELECT max(`order`) + 1 INTO neworder FROM `trigger` WHERE `group` = NEW.`group`;
SET NEW.`order` = neworder;
顺便说一句,在表名或列名中使用保留字不是一个好主意。

您可能需要重新考虑您的命名方案。

谢谢您的快速回答,Johan,但是,似乎有一个问题。触发器适用于已填充到表中的组列,但当添加新组值时,我得到一个“列“order”不能为null”mySQL错误。问题是因为当组事先不存在时,neworder select查询没有返回任何内容。我添加了一个if-else语句来检查这一点,现在它就像一个符咒。