Trình kích hoạt bạn hiển thị ở trên là tốt.
chỉnh sửa: Khi bạn tạo trình kích hoạt trong GUI của phpMyAdmin, bạn chỉ cần nhập nội dung của trình kích hoạt trong Định nghĩa , nói cách khác là phần BEGIN...END
.
Điều này là do phpMyAdmin sẽ cố gắng thông minh và viết tiêu đề trình kích hoạt cho bạn dựa trên các yếu tố khác mà bạn nhập (tên, bảng, thời gian, sự kiện).
Đây là cách phù hợp để xác định trình kích hoạt trong phpMyAdmin:
Nếu bạn viết CREATE TRIGGER...
header bên trong phần thân, nó sẽ gây nhầm lẫn cho MySQL vì nó sẽ thấy CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Điều này làm cho MySQL nghĩ rằng bạn đang xác định một trình kích hoạt có câu lệnh đầu tiên là CREATE TRIGGER
.
Là một vấn đề phụ so với câu hỏi ban đầu của bạn, tôi đề xuất một số thay đổi trong phần nội dung của trình kích hoạ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
Những thay đổi:
- Tham chiếu
NEW.ID
thay vìDelivery.ID
. - Sử dụng SQL-92
JOIN
cú pháp thay vì tham gia "kiểu dấu phẩy" trong SQL-89. - Sử dụng nhiều bảng
UPDATE
với các phép nối, thay vìEXISTS
với truy vấn con tương quan. - Sử dụng dấu ngoặc đơn cho chuỗi thay vì dấu ngoặc kép.
- Chấm dứt
UPDATE
câu lệnh có dấu chấm phẩy.