CASCADE quy định "khi xoá/sửa dòng cha thì làm gì với dòng con". Các lựa chọn ON DELETE:
- CASCADE: xoá cha → tự xoá luôn con (xoá user → mất hết order, comment, session). Tiện nhưng nguy hiểm nếu đặt nhầm.
- SET NULL: xoá cha → đặt FK con về NULL, con vẫn còn (xoá category →
products.category_id = NULL). Dùng khi con tồn tại độc lập được. - RESTRICT (mặc định): chặn xoá cha nếu còn con — an toàn nhất, app phải tự xử lý.
- SET DEFAULT: đặt FK về giá trị mặc định.
Lưu ý chuỗi lan: A → B → C cùng CASCADE thì xoá A kéo theo B rồi C — dễ không lường hết.
Khi nào dùng CASCADE: quan hệ "sở hữu" rõ ràng, con vô nghĩa nếu thiếu cha (order → order_items, user → sessions). Khi không nên: tài nguyên dùng chung (xoá tác giả không nên xoá sách nếu sách còn giá trị riêng). Lưu ý: nếu dùng soft delete thì CASCADE không kích hoạt — phải tự code logic xoá lan ở tầng app.