通过MySQL中的触发器插入增加数字字段
我正在构建一个数据版本控制系统,每次向版本表中添加新行时,我都需要增加一个版本号,但它会增加一次,然后停止:通过MySQL中的触发器插入增加数字字段,mysql,Mysql,我正在构建一个数据版本控制系统,每次向版本表中添加新行时,我都需要增加一个版本号,但它会增加一次,然后停止: DELIMITER | CREATE TRIGGER trigger2 AFTER UPDATE ON something FOR EACH ROW BEGIN IF NEW.updated_at <> OLD.updated_at THEN INSERT INTO versions_something (
DELIMITER |
CREATE TRIGGER trigger2 AFTER UPDATE ON something
FOR EACH ROW
BEGIN
IF NEW.updated_at <> OLD.updated_at THEN
INSERT INTO versions_something (
`id`,
`some_id`,
`version`,
`title`,
`description`,
`created_at`,
`updated_at`
) VALUES (
null,
NEW.id,
1,
NEW.title,
NEW.description,
NOW(),
NOW()
);
END IF;
UPDATE
versions_something
SET
version = (SELECT MAX(version)) + 1
WHERE versions_something.id = LAST_INSERT_ID();
END;
|
DELIMITER ;
分隔符|
在更新某些内容后创建触发器触发器2
每行
开始
如果NEW.updated_at OLD.updated_at THEN
插入一些东西(
`id`,
`有些人`,
`版本`,
`标题`,
`说明`,
`已在“”处创建_,
`更新地址`
)价值观(
无效的
新身份证,
1.
新标题,
新的描述,
现在(),
现在()
);
如果结束;
更新
什么
设置
版本=(选择最大(版本))+1
其中,versions_something.id=最后一次_INSERT_id();
结束;
|
定界符;
我曾尝试将更新放在一个单独的触发器中(在版本插入之后…
),但MySQL抱怨它与之前的触发器冲突
我自己尝试了
更新
,使用表中的最后一个ID,每次都有效,所以我不知道发生了什么事。而不是否决这个问题,因为我既不是通灵者,也不是万事通者,提供实际反馈不是更好的主意吗?我在这里留下一个想法。你考虑过自动递增列吗?每次添加新条目时,它们都会自动递增。如果要知道行数,请使用SELECT COUNT()
。如果需要最大值,请使用无参数的SELECT MAX()
,LAST_INSERT_ID()返回一个BIGINT无符号(64位)值,该值表示作为最近执行的INSERT语句的结果为自动增量列成功插入的第一个自动生成的值。-您是否有和自动增量字段,如果其id为,为什么要将其设置为null@Nic3500,自动增量属性必须与主键一起使用,当我尝试设置该属性时,在Larevel中出现错误。@P.Salmon,正如我向Nic解释的,当我尝试创建具有自动增量属性的字段时,在Larevel中出现错误。