sql >> Database >  >> Database Tools >> phpMyAdmin

Kan geen TRIGGER maken vanuit een andere opgeslagen routine -- Wat is een andere opgeslagen routine?

De trigger die je hierboven laat zien is prima.

bewerken: Wanneer u een trigger aanmaakt in de GUI van phpMyAdmin, hoeft u alleen de hoofdtekst van de trigger in te voeren in de Definitie paneel, met andere woorden het deel BEGIN...END .

Dit komt omdat phpMyAdmin zal proberen slim te zijn en de triggerheader voor u zal schrijven op basis van de andere elementen die u invoert (naam, tabel, tijd, evenement).

Dit is de juiste manier om een ​​trigger in phpMyAdmin te definiëren:

Als u de CREATE TRIGGER... . schrijft header in de body, het zal MySQL verwarren omdat het CREATE TRIGGER... CREATE TRIGGER... BEGIN...END zal zien . Hierdoor denkt MySQL dat u een trigger definieert waarvan de eerste instructie CREATE TRIGGER is .

Als een bijzaak van uw oorspronkelijke vraag, zou ik enkele wijzigingen in de hoofdtekst van de trigger voorstellen:

CREATE TRIGGER Update_Last_Transit_Status AFTER INSERT ON Delivery 
FOR EACH ROW
BEGIN
  UPDATE Transportation
    INNER JOIN Transit ON Transit.Transportation_ID = Transportation.ID
    INNER JOIN Route ON Transit.ID = Route.Transit_ID
  SET Transportation.Status = 'Dispatched'
  WHERE Route.Delivery_ID = NEW.ID
    AND Transportation.Status = 'In Branch';
END

De wijzigingen:

  • Referentie NEW.ID in plaats van Delivery.ID .
  • Gebruik SQL-92 JOIN syntaxis in plaats van SQL-89 "kommastijl" joins.
  • Gebruik multi-table UPDATE met joins, in plaats van EXISTS met gecorreleerde subquery.
  • Gebruik enkele aanhalingstekens voor strings in plaats van dubbele aanhalingstekens.
  • Beëindig de UPDATE statement met een puntkomma.



  1. MEERDERE rijen/gegevensinvoer bewerken in SQL Server Management Studio

  2. Wat betekent het phpMyAdmin-pictogram (doos met boeken?) naast bepaalde databases?

  3. Hoe schrijf je een opgeslagen procedure in phpMyAdmin?

  4. Gegevens zoals gehele getallen en tekstreeksen van een telefoon naar een webdatabase verzenden