Làm cách nào để lấy danh sách tất cả các ràng buộc từ một cơ sở dữ liệu cụ thể?
Câu trả lời:
Sử dụng information_schema.table_constraints
bảng để lấy tên của các ràng buộc được xác định trên mỗi bảng:
select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'
Sử dụng information_schema.key_column_usage
bảng để lấy các trường trong từng ràng buộc đó:
select *
from information_schema.key_column_usage
where constraint_schema = 'YOUR_DB'
Thay vào đó, nếu 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'
information_schema.columns.column_default
.
Câu trả lời tuyệt vời của @Senseful.
Tôi đang trình bày truy vấn đã sửa đổi cho những người chỉ tìm kiếm danh sách các tên ràng buộc (chứ không phải các chi tiết / cột khác):
SELECT DISTINCT(constraint_name)
FROM information_schema.table_constraints
WHERE constraint_schema = 'YOUR_DB'
ORDER BY constraint_name ASC;
Điều này thực sự hữu ích nếu bạn muốn xem các ràng buộc khóa chính và khóa ngoại cũng như các quy tắc xung quanh các ràng buộc đó chẳng hạn như ON_UPDATE và ON_DELETE cũng như tên cột và cột ngoại 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 điều 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