sql >> Base de Datos >  >> RDS >> Mysql

Error de MySql:no se puede actualizar la tabla en la función/disparador almacenado porque ya la usó la instrucción que invocó esta función/disparador almacenado

No puede cambiar una tabla mientras el activador INSERTAR se está activando. El INSERTO podría hacer algún bloqueo que podría resultar en un interbloqueo. Además, actualizar la tabla desde un disparador haría que el mismo disparador se disparara nuevamente en un ciclo recursivo infinito. Ambas razones explican por qué MySQL le impide hacer esto.

Sin embargo, dependiendo de lo que intente lograr, puede acceder a los nuevos valores usando NUEVO.nombre de campo o incluso los valores antiguos, si está haciendo una ACTUALIZACIÓN, con VIEJO.

Si tuviera una fila llamada full_brand_name y quería usar las dos primeras letras como un nombre corto en el campo small_name podrías 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