开发者社区> 问答> 正文

MySQL触发器将字段更新为id的值?mysql

我想要一个触发器来对插入的记录执行以下操作:

# pseudocode if new.group_id is null set new.group_id = new.id else # don't touch it end 更清楚的说:说我有一个包含三列的表:id主键,group_id整型,valuevarchar。

当我这样插入时group_id:

INSERT INTO table(value, group_id) VALUES ('a', 10) 我想拥有:

id | group_id | value ---+----------+------ 1 | 10 | a 但是当我省略时group_id:

INSERT INTO table(value) VALUES ('b') 它应自动设置id为此记录的:

id | group_id | value ---+----------+------ 2 | 2 | b 扳机有可能吗?(我知道插入后可以更新记录,但使用触发器会更好。)

展开
收起
保持可爱mmm 2020-05-18 09:52:31 32446 0
1 条回答
写回答
取消 提交回答
  • "我不知道任何方法可以在一个语句中执行此操作,即使使用触发器也是如此。

    @Lucky建议的触发器解决方案在MySQL中如下所示:

    CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable FOR EACH ROW BEGIN SET NEW.group_id = COALESCE(NEW.group_id, NEW.id); END 但是,有一个问题。在此BEFORE INSERT阶段,id尚未生成自动生成的值。因此,如果group_id为null,则默认NEW.id为始终为0。

    但是,如果您在此AFTER INSERT阶段将触发器更改为触发,那么您就可以访问的生成值NEW.id,则无法修改列值。

    MySQL不支持DEFAULT列的表达式,因此您也不能在表定义中声明此行为。*更新:MySQL 8.0.13支持,DEFAULT ( )但表达式仍然不能依赖于自动增量值(已记录)。

    唯一的解决方案是执行INSERT,然后立即执行UPDATE来更改group_id未设置的。

    INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a'); UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();" 来源:stack overflow

    2020-05-18 10:13:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像