Bạn không thể thay đổi bảng trong khi trình kích hoạt INSERT đang kích hoạt. INSERT có thể thực hiện một số khóa có thể dẫn đến bế tắc. Ngoài ra, cập nhật bảng từ một trình kích hoạt sau đó sẽ khiến chính trình kích hoạt đó kích hoạt lại trong một vòng lặp đệ quy vô hạn. Cả hai lý do này là lý do tại sao MySQL ngăn bạn làm điều này.
Tuy nhiên, tùy thuộc vào những gì bạn đang cố gắng đạt được, bạn có thể truy cập các giá trị mới bằng cách sử dụng NEW.fieldname hoặc thậm chí các giá trị cũ - nếu thực hiện CẬP NHẬT - với OLD.
Nếu bạn có một hàng có tên full_brand_name
và bạn muốn sử dụng hai chữ cái đầu tiên làm tên ngắn trong trường small_name
bạn có thể sử dụng:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2)))
END