我不知道任何方法可以在一个语句中执行此操作,即使使用触发器也是如此。
@Lucky建议的触发器解决方案在MySQL中如下所示:
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTableFOR EACH ROW BEGIN SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);END
但是,有一个问题。在此
BEFOREINSERT阶段,
id尚未生成自动生成的值。因此,如果
group_id为null,则默认
NEW.id为始终为0。
但是,如果您在此
AFTER INSERT阶段将触发器更改为触发,那么您就可以访问的生成值
NEW.id,则无法修改列值。
MySQL不支持
DEFAULT列的表达式,因此您也不能在表定义中声明此行为。*更新:MySQL 8.0.13支持,
DEFAULT(<expression>)但表达式仍然不能依赖于自动增量值(已记录)。
唯一的解决方案是执行
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();



