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

Kan inte skapa en TRIGGER från en annan lagrad rutin -- Vad är en annan lagrad rutin?

Triggern du visar ovan är bra.

redigera: När du skapar en utlösare i gränssnittet för phpMyAdmin behöver du bara ange utlösarens kropp i Definition rutan, med andra ord delen BEGIN...END .

Detta beror på att phpMyAdmin kommer att försöka vara smart och skriva utlösarhuvudet åt dig baserat på de andra elementen du anger (namn, tabell, tid, händelse).

Här är rätt sätt att definiera en utlösare i phpMyAdmin:

Om du skriver CREATE TRIGGER... header inuti kroppen, kommer den att förvirra MySQL eftersom den kommer att se CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Detta gör att MySQL tror att du definierar en trigger vars första sats är CREATE TRIGGER .

Som ett sidoproblem från din ursprungliga fråga skulle jag föreslå några ändringar i utlösarens kropp:

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

Ändringarna:

  • Referens NEW.ID istället för Delivery.ID .
  • Använd SQL-92 JOIN syntax istället för SQL-89 "comma style" joins.
  • Använd multi-table UPDATE med kopplingar, istället för EXISTS med korrelerad underfråga.
  • Använd enkla citattecken för strängar istället för dubbla citattecken.
  • Avsluta UPDATE uttalande med semikolon.



  1. Importera SQL-fil via kommandoraden i Windows 7

  2. MySQL visar inte databaser skapade i phpMyAdmin

  3. Hur man definierar en uppskjuten begränsning i MySQL

  4. Ny DBeaver-webbplats