Một chủ đề rất tốt về chủ đề này là được tìm thấy ở đây và cũng ở đây . Hướng dẫn dứt khoát cho MySQL, tất nhiên, là tài liệu, được tìm thấy ở đây .

Trong tiêu chuẩn SQL 2003 có 5 hành động tham chiếu khác nhau:

Quảng Cáo

  1. TRƯỜNG HỢP
  2. GIỚI HẠN
  3. KHÔNG CÓ HÀNH ĐỘNG
  4. THIẾT LẬP
  5. THIẾT BỊ DEFAULT

Để trả lời câu hỏi:

  1. TRƯỜNG HỢP

    Quảng Cáo

    • ON DELETE CASCADEcó nghĩa là nếu bản ghi cha bị xóa, bất kỳ bản ghi con nào cũng bị xóa. Đây không phải là một ý tưởng tốt trong quan điểm của tôi. Bạn nên theo dõi tất cả dữ liệu đã có trong cơ sở dữ liệu, mặc dù điều này có thể được thực hiện bằng TRIGGERs. (Tuy nhiên, xem cảnh báo trong các ý kiến ​​dưới đây).

    • ON UPDATE CASCADEcó nghĩa là nếu khóa chính được thay đổi, giá trị con cũng sẽ thay đổi để phản ánh điều đó. Một lần nữa theo ý kiến ​​của tôi, không phải là một ý tưởng tuyệt vời. Nếu bạn đang thay đổi PRIMARY KEYbất kỳ sự đều đặn nào (hoặc thậm chí là tất cả!), Thì có gì đó không ổn với thiết kế của bạn. Một lần nữa, xem ý kiến.

      Quảng Cáo

    • ON UPDATE CASCADE ON DELETE CASCADEcó nghĩa là nếu bạn UPDATE HOẶC DELETE cha mẹ, sự thay đổi được xếp tầng cho đứa trẻ. Điều này tương đương ANDvới kết quả của hai tuyên bố đầu tiên.

  2. GIỚI HẠN

    • RESTRICTcó nghĩa là bất kỳ nỗ lực nào để xóa và / hoặc cập nhật cha mẹ sẽ không đưa ra lỗi. Đây là hành vi mặc định trong trường hợp hành động tham chiếu không được chỉ định rõ ràng.

      Đối với một ON DELETEhoặc ON UPDATEkhông được chỉ định, hành động mặc định luôn luôn là RESTRICT`.

  3. KHÔNG CÓ HÀNH ĐỘNG

    • NO ACTION: Từ hướng dẫn . Một từ khóa từ SQL tiêu chuẩn. Trong MySQL, tương đương với RESTRICT. Máy chủ MySQL từ chối thao tác xóa hoặc cập nhật cho bảng cha nếu có giá trị khóa ngoài liên quan trong bảng được tham chiếu. Một số hệ thống cơ sở dữ liệu đã kiểm tra hoãn lại và NO ACTIONlà kiểm tra hoãn lại. Trong MySQL, các ràng buộc khóa ngoại được kiểm tra ngay lập tức, do đó, NO ACTIONgiống như RESTRICT.
  4. THIẾT LẬP

    • SET NULL- một lần nữa từ hướng dẫn. Xóa hoặc cập nhật hàng từ bảng cha và đặt cột hoặc cột khóa ngoại trong bảng con thành NULL. Đây không phải là ý tưởng hay nhất IMHO, chủ yếu vì không có cách “du hành thời gian” – tức là nhìn lại các bảng con và liên kết các bản ghi với NULLs với bản ghi cha có liên quan – CASCADEhoặc sử dụng TRIGGERs để điền vào bảng ghi nhật ký để theo dõi thay đổi (nhưng, xem ý kiến).
  5. THIẾT BỊ DEFAULT

    • SET DEFAULT. Một phần khác (có khả năng rất hữu ích) của tiêu chuẩn SQL mà MySQL đã không thực hiện! Cho phép nhà phát triển chỉ định một giá trị để đặt (các) cột khóa ngoài vào CẬP NHẬT hoặc XÓA. InnoDB và NDB sẽ từ chối các định nghĩa bảng với một SET DEFAULTmệnh đề.
WEBSITE UY TÍN ĐẶT CƯỢC WORLD QATAR 2022

Như đã đề cập ở trên, bạn nên dành thời gian xem tài liệu ở đây .

Leave a Reply

Your email address will not be published. Required fields are marked *