Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng MySQL _______0_______1 hành động tham chiếu cho khóa ngoại để xóa dữ liệu khỏi nhiều bảng có liên quan
Trong hướng dẫn trước, bạn đã học cách xóa dữ liệu khỏi nhiều bảng có liên quan bằng cách sử dụng một câu lệnh
2. Tuy nhiên, MySQL cung cấp một cách hiệu quả hơn được gọi là hành động tham chiếuCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
1 cho khóa ngoại cho phép bạn xóa dữ liệu khỏi bảng con một cách tự động khi bạn xóa dữ liệu khỏi bảng chaCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
MySQL CREATE TABLE buildings [
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR[255] NOT NULL,
address VARCHAR[255] NOT NULL
];
Code language: SQL [Structured Query Language] [sql]
1 ví dụ
CREATE TABLE buildings [
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR[255] NOT NULL,
address VARCHAR[255] NOT NULL
];
Hãy cùng xem một ví dụ về việc sử dụng MySQL
1Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Giả sử rằng chúng ta có hai bảng.
6 vàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
7. Trong mô hình cơ sở dữ liệu này, mỗi tòa nhà có một hoặc nhiều phòng. Tuy nhiên, mỗi phòng thuộc về một tòa nhà duy nhất. Một căn phòng sẽ không tồn tại nếu không có một tòa nhàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Mối quan hệ giữa các bảng
6 vàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
7 là quan hệ một-nhiều [1. N] như được minh họa trong sơ đồ cơ sở dữ liệu sauCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Khi bạn xóa một hàng khỏi bảng
6, bạn cũng muốn xóa tất cả các hàng trong bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
7 tham chiếu đến hàng trong bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
6. Ví dụ: khi bạn xóa một hàng có số tòa nhà. 2 trong bảngCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
6 như truy vấn sau
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Code language: SQL [Structured Query Language] [sql]
Code language: SQL [Structured Query Language] [sql]
DELETE FROM buildings WHERE building_no = 2;
Bạn cũng muốn các hàng trong bảng
7 đề cập đến tòa nhà số 2 cũng sẽ bị xóaCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Sau đây là các bước minh họa cách hoạt động của tác vụ tham chiếu
1Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Bước 1. Tạo bảng
6Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Bước 2. Tạo bảng
7Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE rooms [ room_no INT PRIMARY KEY AUTO_INCREMENT, room_name VARCHAR[255] NOT NULL, building_no INT NOT NULL, FOREIGN KEY [building_no] REFERENCES buildings [building_no] ON DELETE CASCADE ];
Lưu ý rằng mệnh đề
1 ở cuối định nghĩa ràng buộc khóa ngoạiCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Bước 3. Chèn các hàng vào bảng
6Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
INSERT INTO buildings[building_name,address] VALUES['ACME Headquaters','3950 North 1st Street CA 95134'], ['ACME Sales','5000 North 1st Street CA 95134'];
Code language: SQL [Structured Query Language] [sql]
Bước 4. Truy vấn dữ liệu từ bảng
6Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Code language: SQL [Structured Query Language] [sql]
SELECT * FROM buildings;
Chúng ta có hai hàng trong bảng
6.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Bước 5. Chèn các hàng vào bảng
7Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Code language: SQL [Structured Query Language] [sql]
INSERT INTO rooms[room_name,building_no] VALUES['Amazon',1], ['War Room',1], ['Office of CEO',1], ['Marketing',2], ['Showroom',2];
Bước 6. Truy vấn dữ liệu từ bảng
7Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Code language: SQL [Structured Query Language] [sql]
SELECT * FROM rooms;
Chúng tôi có ba phòng thuộc tòa nhà số 1 và hai phòng thuộc tòa nhà số 2.
Bước 7. Xóa tòa nhà có số tòa nhà. 2
Code language: SQL [Structured Query Language] [sql]
DELETE FROM buildings WHERE building_no = 2;
Bước 8. Truy vấn dữ liệu từ bảng
7Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
SELECT * FROM rooms;
Code language: SQL [Structured Query Language] [sql]
Như bạn có thể thấy, tất cả các hàng tham chiếu đến
5 2 đã tự động bị xóa.Code language: SQL [Structured Query Language] [sql]
INSERT INTO buildings[building_name,address] VALUES['ACME Headquaters','3950 North 1st Street CA 95134'], ['ACME Sales','5000 North 1st Street CA 95134'];
Lưu ý rằng
1 chỉ hoạt động với các bảng có công cụ lưu trữ hỗ trợ khóa ngoại e. g. , InnoDBCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Một số loại bảng không hỗ trợ khóa ngoại như MyISAM, vì vậy bạn nên chọn công cụ lưu trữ thích hợp cho các bảng mà bạn định sử dụng MySQL
1 hành động tham khảoCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Mẹo để tìm các bảng bị ảnh hưởng bởi MySQL CREATE TABLE buildings [
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR[255] NOT NULL,
address VARCHAR[255] NOT NULL
];
Code language: SQL [Structured Query Language] [sql]
1 hành động
CREATE TABLE buildings [
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR[255] NOT NULL,
address VARCHAR[255] NOT NULL
];
Đôi khi, rất hữu ích khi biết bảng nào bị ảnh hưởng bởi hành động tham chiếu
1 khi bạn xóa dữ liệu khỏi bảng. Bạn có thể truy vấn dữ liệu này từCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
0 trong cơ sở dữ liệuCode language: SQL [Structured Query Language] [sql]
SELECT * FROM buildings;
1 như sauCode language: SQL [Structured Query Language] [sql]
SELECT * FROM buildings;
Code language: SQL [Structured Query Language] [sql]
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
Ví dụ: để tìm các bảng được liên kết với bảng
6 bằng quy tắc xóaCode language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
3 trong cơ sở dữ liệuCode language: SQL [Structured Query Language] [sql]
SELECT * FROM buildings;
4, bạn sử dụng truy vấn sauCode language: SQL [Structured Query Language] [sql]
SELECT * FROM buildings;
0Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];
Trong hướng dẫn này, bạn đã học cách sử dụng MySQL
1 hành động tham chiếu cho khóa ngoại để tự động xóa dữ liệu khỏi bảng con khi bạn xóa dữ liệu khỏi bảng cha.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE buildings [ building_no INT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR[255] NOT NULL, address VARCHAR[255] NOT NULL ];