Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để xóa thác khi cha mẹ và ID con nằm trên cùng một bảng?

Bạn chỉ cần đảm bảo rằng bạn đã thiết lập khóa ngoại từ hàng con đến hàng mẹ, với ON DELETE CASCASDE tùy chọn đặt trên khóa ngoại. Điều này hoạt động tốt như một bảng tự tham chiếu cũng như nó hoạt động với các tham chiếu trong các bảng riêng biệt. Để xóa cây, chỉ cần xóa nút cha. Tất cả các hàng con sẽ bị xóa hoàn toàn.

ví dụ. Đã cho:

CREATE TABLE MyTable
(
  ID INT NOT NULL PRIMARY KEY,
  ParentID INT  NULL,
  CONSTRAINT FK_MT_Parent FOREIGN KEY (ParentID) REFERENCES MyTable(ID) ON DELETE CASCADE
);

-- And inserting two trees of data:
-- 1-2-3
--   └-4
-- 10 - 11
INSERT INTO MyTable(ID,ParentID) VALUES
    (1,null), (2,1), (3,2), (4,2),
    (10,null), (11,10);

Chúng ta có thể xóa toàn bộ cây đầu tiên bằng cách xóa nút gốc:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle tương tự

Tuy nhiên, lưu ý rằng từ Tài liệu rằng có giới hạn về độ sâu của CASCADE xóa:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO rowCount () sau truy vấn UPDATE có thể hiển thị sự khác biệt giữa hàng không có thay đổi nào và hàng không tồn tại không?

  2. Làm thế nào để chọn độ lệch chuẩn trong một hàng? (trong SQL - hoặc R :)

  3. Các câu lệnh chuẩn bị sẵn trong PHP PDO

  4. JPA + Hibernate:Cách xác định ràng buộc có BẬT XÓA CASCADE

  5. InnoDB chèn rất chậm và làm chậm