2009-06-22 34 views
46

Tôi đang cố gắng phân tích cú pháp MySQL docs. Họ có thể rõ ràng hơn. Những gì họ dường như đang nói là có năm khả năng: SET NULL, NO ACTION, RESTRICT, CASCADE và SET DEFAULT.Hành vi DELETE mặc định của MySQL là gì?

KHÔNG HÀNH ĐỘNG và RESTRICT làm điều tương tự (ngăn chặn bất kỳ thay đổi DB nào phá vỡ FK) và điều đó là mặc định vì vậy nếu bạn bỏ qua mệnh đề ON DELETE, bạn đang nói KHÔNG CÓ ACTION (hoặc RESTRICT - điều tương tự) .

SET NULL cho phép xóa hàng gốc, đặt FK thành NULL.

CASCADE xóa hàng con.

SET DEFAULT không bao giờ được sử dụng.

Điều này chính xác hơn hay ít hơn?

+0

Bạn đã bỏ lỡ tùy chọn CASCADE – jitter

+0

Và bạn đã hiểu chính xác. Không chỉ định tùy chọn tham chiếu trên một ràng buộc FK trong MYSQL cũng giống như nói rằng ON DELETE RESTRICT – jitter

+2

Nó chỉ trong mysql rằng KHÔNG có ACTION và RESTRICT số tiền cho cùng một điều. Trong một DB khác mà tôi không giữ đúng, vì NO ACTION về mặt lý thuyết cho phép xóa/thay đổi cha mẹ được tham chiếu nếu ở cuối hoạt động, ràng buộc FK không bị vi phạm – jitter

Trả lời

57

Vâng, đó là chính xác:

KHÔNG HÀNH ĐỘNG: [...] InnoDB từ chối xóa hoặc cập nhật hoạt động cho bảng cha.

RESTRICT: Từ chối thao tác xóa hoặc cập nhật hoạt động cho bảng cha. Chỉ định RESTRICT (hoặc KHÔNG CÓ HÀNH ĐỘNG) là giống như bỏ qua mệnh đề ON DELETE hoặc ON UPDATE. [...]

Rõ ràng NO ACTIONRESTRICT là đồng nghĩa. Ngoài ra, vì chúng được sử dụng bất cứ khi nào không có mệnh đề ON DELETE/UPDATE, đây là hành vi mặc định.

SET NULL: Xóa hoặc cập nhật các hàng từ bảng cha và thiết lập nước ngoài cột quan trọng hoặc các cột trong bảng trẻ NULL. [...]

Cột nước ngoài được đặt thành NULL, miễn là nó không được khai báo là NOT NULL (hoặc InnoDB sẽ không cho phép xóa hoặc cập nhật).

CASCADE: Xóa hoặc cập nhật các hàng từ bảng phụ huynh và tự động xóa hoặc cập nhật hợp hàng trong bảng con. [...]

Xóa (hoặc cập nhật) cột nước ngoài.

SET DEFAULT: Hành động này được công nhận bởi phân tích cú pháp, nhưng InnoDB từ chối định nghĩa bảng chứa ON DELETE DEFAULT SET hoặc ON UPDATE SET DEFAULT khoản.

Về cơ bản, bạn không thể sử dụng tùy chọn đó.

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