sql >> Database >  >> RDS >> Mysql

Is het in MySQL-trigger mogelijk om een ​​gebruikersvariabele in te stellen met NEW.col en die te gebruiken in de updatequery?

Dit is niet mogelijk zoals beschreven bij dynamische sql / Prepared Statement. Het zou Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger bij de poging om zelfs CREATE TRIGGER .

Het dichtst bij automatisering komt ongeveer het gebruik van CREATE EVENT . Gebeurtenissen zijn geplande opgeslagen programma's die volgens het schema / interval van uw keuze worden uitgevoerd. De intervallen zijn:

Je zou als het ware een "vlag" op een rij kunnen zetten, zoals de tabel die je hierboven weergeeft en die de trigger After Insert heeft. De gebeurtenis kan dan de Prepared Statement dynamisch en voer het uit.

Zie mijn antwoord hier op Evenementenbeheer .

Ik moet zeggen dat zelfs als je in een evenement wordt gehouden, wat je voorstelt bijna Altijd is het teken van een slecht schemaontwerp dat niet goed stand zou houden bij peer review.

Een reden waarom de dynamische sql en een Prepared Stmt niet zijn toegestaan, is omdat de trigger snel moet zijn en zelfs DDL in de string kan worden geslopen en kan worden uitgevoerd. En DDL stmts zoals ALTER TABLE zijn niet toegestaan ​​in triggers (het kan letterlijk uren duren voordat ze worden uitgevoerd).

Je schema kan net zo goed één tabel hebben die wordt gedeeld met een kolom ven_code de differentiatorkolom zijn. In plaats daarvan heb je ervoor gekozen om nieuwe tabellen te maken voor elke ven_code . Dat is meestal een slechte keuze voor ontwerp en prestaties.

Als je hulp nodig hebt bij het ontwerpen van een schema, praat ik er graag met je over in een chatroom.



  1. datetime vs smalldatetime in SQL Server:wat is het verschil?

  2. MySQL dynamisch JOIN

  3. Hoe te updaten van select met een Join

  4. Een variabele gebruiken in OPENROWSET-query