tôi cũng đã tìm kiếm rất nhiều nơi trên internet cho nguyên nhân của mysql error #1442
mà nóinguyên nhân thực sự của lỗi mysql 1442 là gì?
Không thể cập nhật bảng 'unlucky_table' trong lưu trữ chức năng/kích hoạt vì nó đã được sử dụng bởi tuyên bố đó đã viện dẫn chức năng/kích hoạt được lưu trữ
một số người nói rằng đây là lỗi trong mysql hoặc tính năng mà nó không cung cấp.
Một số cho rằng điều này là do hành vi đệ quy when you insert a record mysql is doing some lock stuff. you can't insert/update/delete rows of the same table where you insert.. because then the trigger would called again and again.. ending up in a recursion
bây giờ tôi không thể hiểu tại sao điều này là đệ quy. tôi có một trường hợp trong đó tôi có 2 bảng table1
và table2
và tôi chạy một truy vấn sql như
update table1 set avail = 0 where id in (select id from table2 where duration < now() - interval 2 hour);
bây giờ tôi có một after update trigger
trên table1
như
CREATE TRIGGER trig_table1 AFTER UPDATE ON table1
FOR EACH ROW begin
if old.avail=1 and new.avail=0 then
delete from table2 where id=new.id;
end if;
bây giờ khi tôi thực hiện cập nhật truy vấn tôi gặp lỗi 1442. những gì đệ quy trong trường hợp này?
is this error a lack of feature in mysql?
OR
does this have to do with how mysql executes queries?
OR
is there something logically wrong with executing such queries?
bảng UPDATE của nóName WHERE id in (SELECT id FROM tableName) – lovesh
Tôi vừa nhận xét rằng bạn không thể chọn từ bảng bạn đang cập nhật. Nó không quan trọng những gì là ở nơi miễn là cùng một tablename của nó. Tôi đang tìm kiếm lý do tại sao kích hoạt đó không thành công ngay bây giờ. Nhưng tôi chắc chắn 99% ở trên là lý do tại sao nó không hoạt động. – BradLaney
tôi biết nó không hoạt động đó là lý do tôi yêu cầu cho – lovesh