Hướng dẫn cascade delete trong mysql

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 đề.

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

Bạn thấy bài viết thế nào?

Ở bài trước bạn đã biết được cách tạo khóa chính rồi, vậy thì trong bài này mình sẽ hướng dẫn bạn cách tạo khóa ngoại trong SQL Server. Khóa ngoại là thành phần rất quan trọng tạo nên một hệ thống cơ sở dữ liệu quan hệ, tức là các table sẽ có mối liên hệ với nhau thông qua khóa ngoại.

Bạn đang xem: On delete cascade là gì

Khóa ngoại hay còn gọi là foreign key, đây là mối liên kết giữa hai bảng với nhau tạo thành một lược đồ cơ sở dữ liệu quan hệ.

CREATE TABLE procurement.vendors ( vendor_id INT IDENTITY PRIMARY KEY, vendor_name VARCHAR(100) NOT NULL, group_id INT NOT NULL,);
CREATE TABLE procurement.vendor_groups ( group_id INT IDENTITY PRIMARY KEY, group_name VARCHAR (100) NOT NULL);

Trong đó:

Bảng vendor_group sẽ lưu trữ danh sách các nhóm nhà cung cấp, ví dụ nhà cung cấp hạng A, hạng B, ...Bảng vendors sẽ lưu trữ danh sách nhà cung cấp

Mối liên hệ: Mỗi nhà cung cấp sẽ thuộc một nhóm nào đó, và một nhóm có thể có nhiều nhà cung cấp, đây là quy luật bình thường trong một hệ thống bán hàng.

Để thẻ hiện mối liên hệ này thì trong bảng vendors sẽ có một columngroup_id trỏ đến khóa chính của bảng vendor_group, ta gọi đây là foreign key.

Một số lưu ýcủa khóa ngoại:

Bảng A có khóa ngoại trỏ đến bảng B thì ta gọi A là bảng Cha, còn B là bảng con ( mìnhtự đặt cho dễ nhớ ;))Giá trị của khóa ngoại của bảng conphải tồn tại trong các giá trị khóa chính của bảng cha, đây ta gọi là ràng buộc toàn vẹn.

2. Cách tạo Freign Key trong SQL Server

Tương tự như khóa chính, chúng ta có hai cách để tạo khóa ngoại. Thứ nhất là tạo ngay lệnh create table và thứ hai là sử dụng lệnh alter table.

Tạo ngay lệnh Create Table

Ta sử dụng từ khóaCONSTRAINT ngay ở phía cuối danh sách column.


CREATE TABLE procurement.vendors ( vendor_id INT IDENTITY PRIMARY KEY, vendor_name VARCHAR(100) NOT NULL, group_id INT NOT NULL, CONSTRAINT fk_group FOREIGN KEY (group_id) REFERENCES procurement.vendor_groups(group_id));

Chú ý:

fk_group là tên của khóa ngoại, ta nên đặt tên để sau này dễ dàng quản lý

Trường hợp có nhiều column làm khóa ngoại thì ta sử dụng cú pháp sau:

Quảng cáo

CONSTRAINT fk_constraint_name FOREIGN KEY (column_1, column2,...)REFERENCES parent_table_name(column1,column2,..)

Tạo bằng lệnh Alter Table


ALTER TABLE procurement.vendors ADD FOREIGN KEY fk_group FOREIGN KEY (group_id) REFERENCES procurement.vendor_groups(group_id)

3. Xóa khóa ngoại Foreign Key

Nếu bạn muốn xóa một Foreign Key nào đó thì sử dụng cú pháp sau:


ALTER TABLE table_nameDROP FOREIGN KEY foreign_key_name;

Ví dụ: Xóa foreign keyfk_group ra khỏi tablevendors


ALTER TABLE procurement.vendorsDROP FOREIGN KEY fk_group;

Trên là cách tạo và quản lý khóa ngoại trong SQL Server.

4.Hành động đảm bảo ràng buộc toàn vẹn

Các ràng buộc khóa ngoại giúp đảm bảo tính toàn vẹn của dữ liệu của các tham chiếu, điều đó có nghĩa là khi bạn thêm một dòng record thì giá trị của khóa ngoại phải tồn tại ở bảng cha.

Quảng cáo

Chúng ta có hai hành động chính tác động đến khóa ngoại đó là DELETE và UPDATE, và để giữ tính toàn vẹn thì SQL Server cung cấp haireferential actions như sau:


FOREIGN KEY (foreign_key_columns) REFERENCES parent_table(parent_key_columns) ON UPDATE action ON DELETE action;

Trong đó:

ON UPDATE action là ràng buộc dành cho hành động cập nhậtON DELETE action là ràng buộc dành cho hành động xóa

Chúng ta có 4action gồmNO ACTION, CASCADE, SET NULL, và SET DEFAULT.

Action dành cho Delete

Chi tiết như sau:

ON DELETE NO ACTIONSQL Server sẽ trả về một lỗi và dữ liệu ở bảng cha sẽ được khôi phục.ON DELETE CASCADESQL Server xóa các hàng trong bảng con tương ứng với hàng đã xóa khỏi bảng cha.ON DELETE SET NULLSQL Server sẽ cập nhật dữ liệu ở bảng con sang NULL, để sử dụng được thiết lập này thì column foreign key phải cho phép NULL.ON DELETE SET DEFAULT SQL Server sẽ trả về giá trị mặc định, để sử dụng được thiết lập này thì foreign key phải có giá trị DEFAULT.

Mặc định nếu bạn không thiết lập thì action làON DELETE NO ACTION.

Quảng cáo


Action dành cho Update

Chi tiết như sau:

ON UPDATE NO ACTION SQL Server sẽ trả về lỗi và khôi phục hành động update ở bảng chaON UPDATE CASCADE SQL Server sẽ cập nhật dữ liệu ở bảng con tương ứng với bảng chaON UPDATE SET NULL SQL Server sẽ cập nhật dữ liệu ở bảng con sang NULl,để sử dụng được thiết lập này thì column foreign key phải cho phép NULL.ON UPDATE SET DEFAULTSQL Server sẽ trả về giá trị mặc định, để sử dụng được thiết lập này thì foreign key phải có giá trị DEFAULT.

Xem thêm: Nghĩa Của Từ Recessive Là Gì ? Nghĩa Của Từ Recessive Trong Tiếng Việt

Nhìn chung các action của cả hai hành động đều có ý nghĩa giống nhau.

Quảng cáo

Bài trước Bài tiếp

Quảng cáo

QUẢN TRỊ WEB
» Quản trị Linux
» Thủ thuật Hosting
» Kiến thức Domain
» Windows
» Bảo mật
WEB FRONTEND
» Javascript
» AngularJS
» jQuery
» jQuery Mobile
» HTML & CSS
» Bootstrap
» TypeScript
» SASS CSS
» VueJS
» NestJS
» Học ReactJS
WEB BACKEND
» PHP
» Codeigniter
» Laravel
» WordPress
» Phalcon
» OpenCart
» NodeJS
» Blogspot
DATABASE
» Học MySQL
» Học MongoDB
» CSDL căn bản
» Học Oracle
» Học SQL Server
» Học SQLite
PROGRAMMING
» Python
» Java
» Pascal
» Học C#
» Học Ruby
» Học Swift
» C / C++
» Kotlin
» Golang
» Giải thuật
» Visual Basic
MOBILE DEV
» React Native
» Học iOS
» Android
CÔNG CỤ
» Học Git
» Testing
» Control Panel
» Dev Tool
» FFmpeg
TIN HỌC
» Excel
» Word
» PowerPoint
» Access
» Photoshop
MÔN HỌC
» Tiếng Anh
» Toán
» Tiếng Nhật
» Văn học
Advertisements

Quảng cáo

Giới thiệu
Giới thiệu Liên hệ Chính sách Điều khoản Guest Post
Liên kết
Thủ thuật Download Game Ứng dụng Tin học Môn học
Hosting
Tinohost Azdigi Vultr INET
Khóa học
PHP AZ Laravel Frontend FullStack Javascript jQuery Javascript NodeJS + ReactJS

Hướng dẫn cascade delete trong mysql