Mysql
 sql >> Database >  >> RDS >> Mysql

In MySQL trigger, è possibile impostare una variabile utente con NEW.col e utilizzarla nella query di aggiornamento?

Ciò non è possibile come descritto con sql dinamico / istruzione preparata. Genererebbe Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger al tentativo di CREATE TRIGGER .

La cosa più vicina all'automazione è usare CREATE EVENT . Gli eventi sono programmi memorizzati programmati che vengono eseguiti in base al programma/intervallo di tua scelta. Gli intervalli sono:

Potresti impostare un "flag" per così dire su una riga, come la tabella che stai raffigurando sopra che ha il trigger Dopo l'inserimento. L'evento potrebbe quindi eseguire la Dichiarazione preparata dinamicamente ed eseguirlo.

Vedi la mia risposta qui su Gestione eventi .

Devo dire che anche se si corre in un evento, quello che proponi è quasi Sempre il segno di una progettazione dello schema scadente che non reggerebbe bene alla revisione tra pari.

Un motivo per cui Dynamic sql e Prepared Stmt non sono consentiti è perché il trigger deve essere veloce e anche DDL potrebbe essere intrufolato nella stringa ed eseguito. E DDL stmts come ALTER TABLE non sono consentiti nei trigger (potrebbero volerci ore per essere eseguiti letteralmente).

Il tuo schema potrebbe anche avere una tabella condivisa con una colonna ven_code essendo la colonna del differenziatore. Invece hai scelto di creare nuove tabelle per ogni ven_code . In genere si tratta di una scelta di design e prestazioni scadente.

Se hai bisogno di aiuto con la progettazione dello schema, sono felice di parlarne con te in una chat room.