MySQL: Cách kiểm tra khóa ngoại liên quan đến bảng


43

Làm thế nào để xem các khóa ngoại liên quan đến một bảng trong MySql?

Bối cảnh : Tôi muốn thả một bảng trong MySql có ràng buộc khóa ngoại. Khi tôi làm điều đó tôi nhận được điều này:

Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails

Làm thế nào tôi có thể thả các khóa ngoại liên quan đến bảng để lại cho người khác.

Câu trả lời:


55

Đầu tiên, tìm ra FOREIGN KEYtên ràng buộc của bạn theo cách này:

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'My_Table';

Và sau đó bạn có thể loại bỏ các ràng buộc được đặt tên theo cách sau:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Tài liệu tham khảo: 1 & 2 .

Theo đề xuất của @SteffenWinkler trong các bình luận, nếu có nhiều hơn một bảng tên đó trong các lược đồ / cơ sở dữ liệu khác nhau, bạn có thể thêm một biến vị ngữ vào mệnh đề where của bạn:

AND TABLE_SCHEMA = 'My_Database';

1
Cảm ơn bạn đã chỉnh sửa - Tôi sẽ đáp lại bằng cách 1 câu hỏi của bạn! :-)

16
Ngoài ra, SHOW CREATE TABLE My_Table;.
Rick James

2
@RickJames chỉ hiển thị các ràng buộc trên các bảng khác My_Tablecó. Câu hỏi yêu cầu các ràng buộc trên My_Tablecác bảng khác có.
ADTC

2
chỉ dành cho những người chỉ liếc qua điều này: Câu lệnh đó sẽ liệt kê tất cả các ràng buộc tham chiếu một bảng theo tên được chỉ định trên toàn bộ máy chủ cơ sở dữ liệu. Giới hạn nó vào cơ sở dữ liệu có liên quan bằng cách thêmAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler

3

Đã chỉnh sửa Truy vấn ở trên. Tên bảng được tham chiếu đã thay đổi thành Tên bảng như tên bảng được tham chiếu là bảng đang được tham chiếu và do đó kết quả của truy vấn ban đầu sẽ không hiển thị cho bạn các khóa ngoại trên bảng của bạn.

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  Table_name = 'case_qualitycontrolcase' and constraint_name = f
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.