Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Gatilho MySQL para atualizar um campo para o valor de id


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();