2011-05-18 30 views
20

Tôi có bảng "A" trong MySQL. Nó có một số tài liệu tham khảo với cascade xóa một số bảng khác ("B", "C", "D" ...). Tôi cần phải sử dụng một kích hoạt khi một cái gì đó xóa từ "A". Trình kích hoạt này hoạt động khi tôi xóa bản ghi từ "A" trực tiếp. Nhưng nó không hoạt động với việc xóa tầng. Có bất kỳ phiên bản MySQL nào tồn tại ở nơi trình kích hoạt của tôi sẽ hoạt động với việc xóa tầng không? Hoặc, có thể, có một cách khác để gọiCuộc gọi kích hoạt trong tầng xóa

+1

Đây là một đối số để thực hiện logic trong mã ứng dụng, không phải là thiết lập phức tạp của Trình kích hoạt và xếp tầng. –

Trả lời

22

Từ http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html

Cascaded hành động chính nước ngoài không kích hoạt trigger

Nói cách khác, bạn không thể sử dụng kích hoạt với xóa cascaded.

+37

Tôi ghét mysql hơn mỗi ngày –

+1

Vâng, họ không làm gì để sửa chữa nó trong 5 (?) Năm qua. – boreq

+1

Tôi chỉ tìm thấy vấn đề này, và nó cực kỳ ngu ngốc :-( –

4

Để tóm tắt câu trả lời từ @Niel de Wet và @Browny Lin:

  1. xóa Đáng buồn thay cascaded không kích hoạt trigger trong MySQL.
  2. Một giải pháp là không sử dụng xóa tầng nhưng thay vào đó thực hiện xóa tự động qua trình kích hoạt khác.
+1

sử dụng trình kích hoạt khác để xóa không phải là phương pháp thích hợp vì nếu tôi có trình kích hoạt trên tableA và xóa một hàng trong bảngB, và nếu tôi có bảng kích hoạt aB để cập nhật tableA, thì một va chạm – Shafizadeh

-2
CREATE TABLE doc (
docID INTEGER NOT NULL AUTO_INCREMENT, 
langCode CHAR(2) NOT NULL, 
title VARCHAR(32), 
PRIMARY KEY (docID, langCode) 
) Type=InnoDB; 

CREATE TABLE author (
authorID INTEGER NOT NULL AUTO_INCREMENT, 
docID CHAR(2) NOT NULL, 
name VARCHAR(32), 
PRIMARY KEY (authorID), 
FOREIGN KEY (docID) REFERENCES doc(docID) ON DELETE CASCADE ON UPDATE CASCADE 
) Type=InnoDB; 
+1

Đây là bản sao trực tiếp của nhận xét từ http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html – hichris123

+1

Điều này dường như không cố gắng trả lời th e câu hỏi ở tất cả. – Pang

1

Hãy để tôi chia sẻ như thế nào Tôi đã "sửa chữa" vấn đề này từ ngày đầu tiên tôi phát hiện ra nó tồn tại. Tôi sao chép trình kích hoạt từ bảng xếp tầng vào bảng đầu tiên bị xóa trực tiếp. Nó chỉ hoạt động.

Rất nhiều lần đó là vấn đề sao chép/dán và đôi khi nó yêu cầu viết lại mã.

Phần tốt nhất là, khi Oracle cuối cùng sửa lỗi này Lỗi bạn chỉ xóa mã kích hoạt khỏi bảng đã nói. Thì đấy!

Các vấn đề liên quan