sql >> Database >  >> RDS >> Mysql

MySql-fout:kan de tabel in de opgeslagen functie/trigger niet bijwerken omdat deze al wordt gebruikt door een instructie die deze opgeslagen functie/trigger heeft aangeroepen

U kunt geen tafel wijzigen terwijl de INSERT-trigger geactiveerd is. De INSERT kan enige vergrendeling uitvoeren, wat kan resulteren in een impasse. Ook zou het bijwerken van de tabel vanuit een trigger ervoor zorgen dat dezelfde trigger opnieuw wordt geactiveerd in een oneindige recursieve lus. Beide redenen zijn waarom MySQL u ervan weerhoudt dit te doen.

Afhankelijk van wat u probeert te bereiken, kunt u echter toegang krijgen tot de nieuwe waarden door NEW.fieldname te gebruiken of zelfs de oude waarden - als u een UPDATE doet - met OLD.

Als je een rij had met de naam full_brand_name en je wilde de eerste twee letters gebruiken als korte naam in het veld small_name je zou kunnen gebruiken:

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


  1. Hoe u de huidige datum en tijd kunt krijgen (zonder tijdzone) in PostgreSQL

  2. DATABASE() – Haal de huidige databasenaam op in MySQL

  3. Is Microsoft Access gemakkelijk te leren?

  4. C#:Oracle Data Type Equivalentie met OracleDbType