2011-12-28 50 views
6

Tôi có hai bảng trong cơ sở dữ liệu của mình: '' 'và' phiếu ''.
Bảng Câu chuyện chứa tất cả thông tin về một bài viết (ví dụ: tiêu đề, nội dung, tên tác giả, v.v.). Bảng phiếu chứa tất cả phiếu bầu cho tất cả các bài viết. Có một trường trong phiếu bầu là được gọi là item_name có chứa id của một bài viết được bỏ phiếu.Cách xóa tất cả các bản ghi có liên quan khỏi các bảng MySQL khác nhau

Nói cách đơn giản, ITEM_NAME trong phiếu bằng id trong tầng (tùy thuộc vào bài viết một người sử dụng bình chọn trên).

Câu hỏi đặt ra là: nếu một bài viết bị xóa, làm cách nào tôi có thể tự động xóa tất cả các bản ghi trong bảng phiếu có liên quan đến bài viết đó?

Có thể thiết lập trong cơ sở dữ liệu, vì vậy không cần phải thiết lập các truy vấn PHP bổ sung?

Dưới đây là cấu trúc cơ sở dữ liệu của tôi:

tầng

enter image description here


phiếu enter image description here

+0

Nhìn vào [ON DELETE CASCADE] (http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html) nếu bạn thiết lập mối quan hệ FK. Nếu bạn không thiết lập mối quan hệ FK, bạn sẽ cần xóa dữ liệu phiếu bầu theo cách thủ công. –

Trả lời

6

MySQL có công cụ lưu trữ khác nhau. Công cụ lưu trữ mặc định là MyISAM trong hầu hết các IDE quản lý MySQL. Nếu bạn sử dụng công cụ lưu trữ này cho các bảng của mình, bạn không thể tạo bất kỳ mối quan hệ nào giữa các cột của chúng và bạn phải tự xóa các cột có liên quan.

Đối với những gì bạn muốn, innoDB là giải pháp tốt nhất. Loại công cụ lưu trữ này làm cho tình huống tạo ra mối quan hệ giữa các cột của các bảng khác nhau.Bạn sẽ cần Primary Keys và Keys nước ngoài trong các bảng của bạn và sau khi tạo những mối quan hệ, bạn phải xác định các tính năng dưới đây để chúng:

ON UPDATE CASCADEON DELETE CASCADE

Vì vậy, bạn sẽ không cần phải xóa các cột giá trị có liên quan sau khi xóa hồ sơ chính.

Hãy xem this link để so sánh chúng trong thử nghiệm điểm chuẩn.

+0

Ngay bây giờ bảng bình chọn là kiểu innoDB, cả hai đều có cùng loại hoặc nó sẽ hoạt động đúng không? – Ilja

+0

@IlyaKnaup, có cả hai đều cần sử dụng InnoDB để làm việc. –

+0

Ngoài ra bạn cần phải tạo mối quan hệ của họ, nếu không bạn không thể đạt được mục tiêu của bạn chỉ với thiết lập chúng như InnoDB –

2

Thiết lập phím nước ngoài trên các lĩnh vực liên quan với thác trên xóa.

Có thể ai đó sẽ có thể cung cấp cho bạn câu trả lời chi tiết hơn, nhưng bạn phải sử dụng công cụ hỗ trợ khóa ngoài (như InnoDB) và PHPMyAdmin sẽ giúp bạn phần còn lại nếu bạn không biết cách thực hiện nó bằng tay.

Chỉ cần đặt, đặt thác trên xóa trên một trường cho cơ sở dữ liệu của bạn xóa mọi bản ghi có ràng buộc đó khi, trong trường hợp của bạn, bài viết (trên bảng khác) sẽ bị xóa.

Xem ở đây để biết thêm thông tin:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

http://forums.digitalpoint.com/showthread.php?t=488163

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