Trung BìnhDatabase iconDatabase

Cascade trong foreign key constraint là gì? ON DELETE CASCADE hoạt động thế nào?

ON DELETE CASCADE tự xóa child rows khi parent bị xóa — tiện nhưng nguy hiểm nếu dùng nhầm; RESTRICT (default) an toàn nhất; chỉ dùng CASCADE khi child không có nghĩa gì nếu thiếu parent (order_items, sessions).

  • ON DELETE CASCADE: xóa user → tự xóa tất cả orders, comments, sessions — tiện nhưng nguy hiểm nếu dùng nhầm.
  • Cascade propagate action từ parent xuống child table tự động.
  • ON DELETE CASCADE: xóa user → tự xóa tất cả orders, comments, sessions — tiện nhưng nguy hiểm nếu dùng nhầm.
  • ON DELETE SET NULL: xóa category → products.category_id = NULL, products vẫn tồn tại — dùng khi child có thể tồn tại độc lập.
  • ON DELETE RESTRICT (default): block delete parent nếu còn child — safe nhất, application phải xử lý explicitly.
  • ON DELETE SET DEFAULT: set FK về default value.
  • ON UPDATE CASCADE: hữu ích khi PK có thể thay đổi (natural keys) — ít dùng với surrogate keys vì chúng immutable.
  • Cascade chains: A → B → C với CASCADE, xóa A tự xóa B rồi C — có thể không nhận ra.
  • Kiểm tra cascade impact: SELECT * FROM information_schema.referential_constraints WHERE unique_constraint_schema = 'public'.
  • Khi nào dùng CASCADE: ownership relationship rõ ràng (user → sessions, order → order_items — items không có nghĩa gì nếu không có order).
  • Khi không nên: shared resources (xóa author không nên xóa books nếu books có value độc lập).
  • Soft delete + CASCADE: khi dùng soft delete thì CASCADE không kích hoạt — phải implement cascade logic trong application.

Xem toàn bộ Database cùng filter theo level & chủ đề con.

Mở danh sách Database