2010-06-11 9 views

Trả lời

102

Sử dụng bảng information_schema.table_constraints để có được tên của các hạn chế được xác định trên mỗi bảng:

select * 
from information_schema.table_constraints 
where constraint_schema = 'YOUR_DB' 

Sử dụng bảng information_schema.key_column_usage để có được các trường trong mỗi một trong những trở ngại:

select * 
from information_schema.key_column_usage 
where constraint_schema = 'YOUR_DB' 

Nếu thay vào đó bạn đang nói về các ràng buộc khóa ngoại, hãy sử dụng information_schema.referential_constraints:

select * 
from information_schema.referential_constraints 
where constraint_schema = 'YOUR_DB' 
+0

Danh sách này sẽ chỉ bao gồm UNIQUE, PRIMARY KEY, hoặc các ràng buộc KEY NGOẠI HỐI. KIỂM TRA là có thể, nhưng không được thi hành. Ràng buộc DEFAULT sẽ không hiển thị khi sử dụng truy vấn này. –

+0

MySQL không lưu trữ ràng buộc CHECK. Nếu bạn cố gắng xác định nó, nó phân tích và âm thầm loại bỏ nó. –

+1

Giá trị DEFAULT không được tính là một ràng buộc. Nó được lưu trữ trong 'information_schema.columns.column_default'. –

16

Câu trả lời tuyệt vời của @Senseful.

tôi trình bày truy vấn sửa đổi đối với những người được những người chỉ tìm kiếm danh sách tên hạn chế (và không chi tiết khác/cột):

SELECT DISTINCT(constraint_name) 
FROM information_schema.table_constraints 
WHERE constraint_schema = 'YOUR_DB' 
ORDER BY constraint_name ASC; 
+1

nếu bạn cần xóa một khi bạn tìm thấy nó, hãy xem tại đây http://stackoverflow.com/a/838412/2401804 – r3wt

-2

SELECT * FROM USER_CONSTRAINTS ĐÂU TABLE_NAME = "tabnam";

0

Điều này thực sự có ích nếu bạn muốn xem chính trong và ngoài nước khó khăn chính cũng như quy tắc xung quanh những trở ngại như ON_UPDATE và ON_DELETE và các tên cột và cột nước ngoài tất cả cùng nhau:

SELECT tc.constraint_schema,tc.constraint_name,tc.table_name,tc.constraint_type,kcu.table_name,kcu.column_name,kcu.referenced_table_name,kcu.referenced_column_name,rc.update_rule,rc.delete_rule 

FROM information_schema.table_constraints tc 

inner JOIN information_schema.key_column_usage kcu 
ON tc.constraint_catalog = kcu.constraint_catalog 
AND tc.constraint_schema = kcu.constraint_schema 
AND tc.constraint_name = kcu.constraint_name 
AND tc.table_name = kcu.table_name 

LEFT JOIN information_schema.referential_constraints rc 
ON tc.constraint_catalog = rc.constraint_catalog 
AND tc.constraint_schema = rc.constraint_schema 
AND tc.constraint_name = rc.constraint_name 
AND tc.table_name = rc.table_name 

WHERE tc.constraint_schema = 'my_db_name' 

Bạn thậm chí có thể muốn để thêm một số thông tin khác về các cột đó, chỉ cần thêm thông tin này vào SQL (và chọn các cột bạn muốn):

LEFT JOIN information_schema.COLUMNS c 
ON kcu.constraint_schema = c.table_schema 
AND kcu.table_name = c.table_name 
AND kcu.column_name = c.column_name