Pemicu yang Anda tunjukkan di atas baik-baik saja.
edit: Saat Anda membuat pemicu di GUI phpMyAdmin, Anda hanya perlu memasukkan isi pemicu di Definisi panel, dengan kata lain bagian BEGIN...END
.
Ini karena phpMyAdmin akan mencoba menjadi pintar dan menulis header pemicu untuk Anda berdasarkan elemen lain yang Anda masukkan (nama, tabel, waktu, acara).
Berikut cara yang tepat untuk menentukan pemicu di phpMyAdmin:
Jika Anda menulis CREATE TRIGGER...
header di dalam body, itu akan membingungkan MySQL karena akan melihat CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Ini membuat MySQL berpikir Anda mendefinisikan pemicu yang pernyataan pertamanya adalah CREATE TRIGGER
.
Sebagai masalah sampingan dari pertanyaan awal Anda, saya menyarankan beberapa perubahan di badan pemicu:
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
Perubahannya:
- Referensi
NEW.ID
bukannyaDelivery.ID
. - Gunakan SQL-92
JOIN
sintaks alih-alih SQL-89 "gaya koma" bergabung. - Gunakan multi-tabel
UPDATE
dengan gabungan, alih-alihEXISTS
dengan subkueri yang berkorelasi. - Gunakan tanda kutip tunggal untuk string, bukan tanda kutip ganda.
- Hentikan
UPDATE
pernyataan dengan titik koma.