Kiểm tra khóa ngoại trong MySQL có thể ngăn bạn thực hiện một số cập nhật cơ sở dữ liệu cho các bảng có ràng buộc khóa ngoại. Trong những trường hợp như vậy, bạn có thể tạm thời vô hiệu hóa tính năng kiểm tra khóa ngoại trong MySQL, thực hiện cập nhật và bật kiểm tra khóa ngoại trong MySQL sau đó. Dưới đây là cách vô hiệu hóa ràng buộc khóa ngoại trong MySQL.
Cách tắt kiểm tra khóa ngoại trong MySQL
Dưới đây là các bước để tắt kiểm tra khóa ngoại trong MySQL.
Bạn có thể tắt tính năng kiểm tra khóa ngoại trong MySQL bằng cách đặt biến hệ thống Foreign_key_checks thành 0.
SET foreign_key_checks = 0
Tương tự, bạn có thể kích hoạt tính năng kiểm tra khóa ngoại trong MySQL bằng cách đặt biến hệ thống Foreign_key_check thành 1
SET foreign_key_checks = 1
Tuy nhiên, xin lưu ý rằng sau khi bạn bật kiểm tra khóa ngoại, MySQL sẽ không xác thực lại dữ liệu hiện có của bạn mà bạn đã thêm sau khi tắt kiểm tra khóa ngoại. Nó sẽ chỉ kiểm tra mọi bổ sung / cập nhật mới vào cơ sở dữ liệu của bạn.
Phần thưởng đọc:Cách tạo trình tự trong MySQL
Chúng ta hãy xem xét một ví dụ. Giả sử bạn có hai bảng quốc gia sau và thành phố chẳng hạn như thành phố có cột khóa ngoại country_id đề cập đến country_id ở quốc gia
CREATE TABLE countries( country_id INT PRIMARY KEY AUTO_INCREMENT, country_name VARCHAR(255) NOT NULL );
CREATE TABLE cities( city_id INT PRIMARY KEY AUTO_INCREMENT, city_name VARCHAR(255), country_id INT, FOREIGN KEY(country_id) REFERENCES countries(country_id) );
Phần thưởng đọc:Cách so sánh hai bảng trong MySQL
Bây giờ, hãy thử chèn một hàng ở thành phố bảng mà không đề cập đến country_id giá trị khóa ngoại và bạn sẽ gặp lỗi như hình dưới đây.
mysql> INSERT INTO cities(city_name, country_id) VALUES('NYC',1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`sample`.`cities`, CONSTRAINT `cities_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `countries` (`country_id`))
Bây giờ chúng ta hãy tắt tính năng kiểm tra khóa ngoại trong MySQL và thử chèn lại hàng.
mysql> SET foreign_key_checks = 0; mysql> INSERT INTO cities(city_name, country_id) VALUES('NYC',1); mysql> select * from cities; +---------+-----------+------------+ | city_id | city_name | country_id | +---------+-----------+------------+ | 2 | NYC | 1 | +---------+-----------+------------+
Bây giờ chúng tôi bật kiểm tra nước ngoài trong MySQL
mysql> SET foreign_key_checks = 1;
Phần thưởng đọc:Cách nhận dữ liệu một tháng trước trong MySQL
Cuối cùng, chúng tôi chèn một hàng tương ứng ở quốc gia bảng.
mysql> INSERT INTO countries(country_id, country_name) VALUES(1,'USA'); mysql> select * from countries; +------------+--------------+ | country_id | country_name | +------------+--------------+ | 1 | USA | +------------+--------------+
Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!