sql >> Databáze >  >> Database Tools >> phpMyAdmin

Nelze vytvořit TRIGGER z jiné uložené rutiny -- Co je další uložená rutina?

Spoušť, kterou ukazujete výše, je v pořádku.

upravit: Když vytvoříte spouštěč v GUI phpMyAdmin, stačí zadat tělo spouštěče do Definice panel, jinými slovy část BEGIN...END .

Je to proto, že phpMyAdmin se bude snažit být chytrý a napsat spouštěcí hlavičku za vás na základě ostatních prvků, které zadáte (jméno, stůl, čas, událost).

Zde je správný způsob, jak definovat spouštěč v phpMyAdmin:

Pokud napíšete CREATE TRIGGER... hlavičku uvnitř těla, bude to matoucí MySQL, protože uvidí CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Díky tomu si MySQL myslí, že definujete spouštěč, jehož první příkaz je CREATE TRIGGER .

Jako vedlejší problém z vaší původní otázky bych navrhl nějaké změny v těle spouště:

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

Změny:

  • Referenční NEW.ID místo Delivery.ID .
  • Použijte SQL-92 JOIN syntaxe namísto SQL-89 „comma style“ joins.
  • Použijte UPDATE pro více tabulek se spojeními namísto EXISTS s korelovaným poddotazem.
  • Pro řetězce používejte jednoduché uvozovky namísto dvojitých.
  • Ukončete UPDATE prohlášení se středníkem.



  1. Povolení XDebug v XAMPP zpomaluje phpmyadmin

  2. jak zadat hodnoty do sloupce rowguid?

  3. Jak přidat automatický přírůstek do sloupce v databázi mysql pomocí phpmyadmin?

  4. Jak zobrazím balíčky SSIS v SQL Server Management Studio?