通过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中出现错误。