Não conheço nenhuma maneira de fazer isso em uma instrução, mesmo usando um gatilho.
A solução de gatilho que @Lucky sugeriu ficaria assim no MySQL:
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END
No entanto, há um problema. No
BEFORE INSERT fase, o id gerado automaticamente valor ainda não foi gerado. Então, se group_id é nulo, o padrão é NEW.id que é sempre 0. Mas se você alterar este gatilho para disparar durante o
AFTER INSERT fase, então você tem acesso ao valor gerado de NEW.id , você não pode modificar valores de coluna. O MySQL não suporta expressões para o
DEFAULT de uma coluna, então você também não pode declarar esse comportamento na definição da tabela. *Atualização:MySQL 8.0.13 suporta DEFAULT (<expression>) mas a expressão ainda não pode depender de um valor de incremento automático (este é documentado
). A única solução é fazer o
INSERT , e imediatamente faça um UPDATE para alterar o group_id se não estiver definido. INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();