Ràng buộc FOREIGN KEY
, giống như các ràng buộc cơ sở dữ liệu khác, đảm bảo tính chính xác và độ tin cậy của dữ liệu. Nó ngăn việc xóa dữ liệu khỏi bảng được tham chiếu, điều này có thể gây ra lỗi và không chính xác
Nhưng đôi khi chúng ta cần vô hiệu hóa ràng buộc khóa ngoại tạm thời hoặc vĩnh viễn, chẳng hạn như khi cắt bớt một bảng hoặc xóa các giá trị cột
Làm cách nào bạn có thể vô hiệu hóa ràng buộc khóa ngoại trong MySQL?
Giải pháp
Có nhiều cách để vô hiệu hóa ràng buộc khóa ngoài trong MySQL
Vô hiệu hóa cho các bảng cụ thể
Nếu bạn muốn vô hiệu hóa ràng buộc khóa ngoại cho các bảng cụ thể, bạn có thể sử dụng câu lệnh DISABLE_KEYS
. Chạy lệnh sau sau khi thay thế table_name
bằng tên bảng của bạn
ALTER TABLE table_name DISABLE KEYS;
Khi bạn đã thực hiện các thao tác được yêu cầu, bạn có thể bật lại kiểm tra khóa ngoại bằng cách chạy lệnh sau
ALTER TABLE table_name ENABLE KEYS;
Vô hiệu hóa cho tất cả Cơ sở dữ liệu và Bảng
Nếu bạn muốn tắt kiểm tra khóa ngoại trên tất cả các cơ sở dữ liệu và bảng, bạn có thể sử dụng câu lệnh FOREIGN_KEY_CHECKS
. Trong MySQL của bạn thực hiện lệnh sau
SET FOREIGN_KEY_CHECKS=0;
Bạn có thể kích hoạt lại ràng buộc bằng lệnh sau
SET FOREIGN_KEY_CHECKS=1;
Vô hiệu hóa vĩnh viễn
Bạn có thể muốn thay đổi vĩnh viễn hành vi của khóa ngoại. Ví dụ: bạn có thể yêu cầu khi xóa một bản ghi, khóa ngoại trong các bảng phụ thuộc phải được đặt thành
ALTER TABLE table_name ENABLE KEYS;
0 Ràng buộc duy nhất cho phép bạn thực thi tính duy nhất của bản ghi trong bảng cơ sở dữ liệu của mình và duy trì tính toàn vẹn của cơ sở dữ liệu. Dưới đây là cách loại bỏ ràng buộc duy nhất khỏi bảng MySQL bằng lệnh MySQL DROP INDEX. Nó cũng được sử dụng để xóa khóa duy nhất trong MySQL
Ràng buộc duy nhất trong MySQL là gì?
Ràng buộc duy nhất cho một bảng là sự kết hợp của một hoặc nhiều trường xác định duy nhất từng bản ghi trong bảng. Các trường này có thể chứa giá trị null miễn là sự kết hợp của các giá trị trường là duy nhất
Phần thưởng đọc. RÀNG BUỘC KHÓA NGOÀI
Cách loại bỏ ràng buộc duy nhất trong MySQL
Dưới đây là các bước để loại bỏ ràng buộc duy nhất trong MySQL. Chúng tôi sẽ sử dụng truy vấn MySQL DROP INDEX để xóa chỉ mục hiện có khỏi bảng
Đây là cú pháp của lệnh DROP INDEX trong MySQL
DROP INDEX constraint_name ON table_name
[algorithm_option | lock_option];
Trong truy vấn trên, constraint_name là tên của ràng buộc và table_name là tên bảng cơ sở dữ liệu của bạn
Xin lưu ý, cho dù bạn muốn DROP INDEX hay DROP UNIQUE CONSTRAINT, bạn cần sử dụng truy vấn DROP INDEX
Phần thưởng đọc. MySQL DROP CƠ SỞ DỮ LIỆU
Bạn cũng có thể cung cấp 2 đối số tùy chọn – algorithm_option và lock_option
algorithm_option có thể có một trong 3 giá trị - mặc định, tại chỗ, sao chép. Tùy thuộc vào đối số của bạn, MySQL sẽ sử dụng các thuật toán khác nhau để loại bỏ ràng buộc duy nhất
Cú pháp của nó là
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
- mặc định - Điều này có tác dụng tương tự như việc không sử dụng đối số algorithm_option
- sao chép – Bảng mà bạn cần xóa ràng buộc, sẽ được sao chép và chỉ mục sẽ bị xóa khỏi bảng sao chép. Trong thời gian này, các thao tác đồng thời như INSERT và UPDATE không được phép
- tại chỗ - Trong trường hợp này, bảng được xây dựng lại tại chỗ mà không bị ràng buộc. Mặc dù tùy chọn này cho phép các hoạt động đồng thời, nhưng nó đặt khóa siêu dữ liệu trong khi thực hiện
Tùy thuộc vào lock_option, MySQL sẽ khóa/không khóa quyền truy cập đọc/ghi vào các bảng của bạn trong khi ràng buộc đang bị xóa. lock_option có cú pháp sau
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
Nó nhận 4 giá trị
- mặc định - nó cho phép đồng thời tối đa cho lựa chọn thuật toán của bạn. nó cho phép cả đọc và ghi đồng thời nếu được hỗ trợ. Nếu không, nó chỉ cho phép đọc đồng thời. Nếu điều đó cũng không được hỗ trợ, nó sẽ thực thi quyền truy cập độc quyền
- không - nếu được hỗ trợ, thì bạn có thể đọc và ghi đồng thời. Mặt khác, MySQL báo lỗi
- chia sẻ – nếu tùy chọn chia sẻ được hỗ trợ, bạn có thể đọc đồng thời nhưng không ghi đồng thời
- độc quyền - tùy chọn này thực thi quyền truy cập độc quyền
Phần thưởng đọc. MySQL DROP CỘT
MySQL DROP UNIQUE CONSTRAINT ví dụ
Giả sử bạn có bảng sau với ràng buộc duy nhất
________số 8_______
Đây là truy vấn SQL để loại bỏ tên ràng buộc duy nhất khỏi các đơn đặt hàng của bảng
mysql> DROP INDEX name ON orders;
Phần thưởng đọc. BẢNG THẢ MySQL
MySQL DROP PRIMARY KEY Chỉ mục
Vì khóa chính cũng là một ví dụ về ràng buộc duy nhất trên bảng, nên đây là cú pháp để loại bỏ ràng buộc khóa chính đối với thứ tự bảng