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

Erro MySql:Não é possível atualizar a tabela na função/gatilho armazenado porque já é usado pela instrução que invocou esta função/gatilho armazenado


Você não pode alterar uma tabela enquanto o gatilho INSERT estiver disparando. O INSERT pode fazer algum travamento que pode resultar em um deadlock. Além disso, atualizar a tabela de um gatilho faria com que o mesmo gatilho fosse disparado novamente em um loop recursivo infinito. Ambos os motivos são os motivos pelos quais o MySQL impede você de fazer isso.

No entanto, dependendo do que você está tentando alcançar, você pode acessar os novos valores usando NEW.fieldname ou até mesmo os valores antigos - se estiver fazendo um UPDATE - com OLD.

Se você tivesse uma linha chamada full_brand_name e você queria usar as duas primeiras letras como um nome curto no campo small_name você poderia usar:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
  SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2)))
END