Hỏi về xóa khóa ngoài trong mysql

Như bình thường xóa khóa ngoài thì ta dùng constraint trước đó đã đặt tên cho tham chiếu.

alter table CON add constraint fk_con_nhanvien foreign key (manv) references NHANVIEN(manv);
alter table CON drop constraint fk_con_nhanvien;
alter table CON drop foreign key fk_con_nhanvien;

2 Lệnh này đều xóa khóa ngoài nhưng khi vào Table Inspector thì trong Indexes vẫn tồn tại tên tham chiếu fk_con_nhanvien. (Đã refresh)

Trong trường hợp tạo khóa ngoài ngay trong lúc khởi tạo bảng thì mình không có đặt tên của tham chiếu, nên đã thử

alter table CON drop foreign key manv;

Lệnh này báo lỗi:

Error Code: 1091. Can’t DROP ‘manv’; check that column/key exists

Và mình thấy nó tự động tạo 1 tên tham chiếu cho cái trên nếu mình không dùng add constraint. Liệu có lệnh nào giúp xóa khóa ngoài mà không cần tên tham chiếu tự động được tạo hoặc add constraint?

Nếu bạn không muốn đụng đến khóa hoặc add constraint thì có 1 cách là disable, lúc nào bạn thích thì bạn enable lại:

SET FOREIGN_KEY_CHECKS=0;

Ngoài ra có cách đơn giản không cần dùng đến lệnh: bạn clich chuột phải vào phần tên khóa tham chiếu tự động được tạo, chọn delete/xóa (xóa bằng cách này thì cả bên index cũng được xóa)

Nếu bạn xóa bằng lệnh thì ngoài lệnh xóa key bạn phải tạo lệnh xóa trên index thì bên index mới không còn. Tức là bạn phải tạo 2 lệnh xóa mới xóa hết được key trong dữ liệu nhé.

ALTER TABLE `table_name`
	DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` 
	DROP INDEX  `id_name_fk`;
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?