2009-12-02 40 views

Trả lời

6
select distinct CONSTRAINT_NAME 
from information_schema.TABLE_CONSTRAINTS 
where CONSTRAINT_SCHEMA = 'mysql' 
42
select distinct CONSTRAINT_NAME 
from information_schema.TABLE_CONSTRAINTS 
where table_name = 'table_name' and constraint_type = 'UNIQUE'; 
2

này không sản xuất ra thanh lịch nhưng rất dễ dàng để nhớ:

SHOW CREATE TABLE table_name; 
0

Các OP hỏi cho một bảng duy nhất, mà điều này sẽ làm.

Bên cạnh đó, loại bỏ các where khoản cuối cùng sẽ hiển thị tất cả các cột trong một cơ sở dữ liệu được bảo vệ bởi ràng buộc duy nhất:

SELECT 
    CONSTRAINT_NAME, 
    TABLE_NAME, 
    COLUMN_NAME 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE 
    CONSTRAINT_NAME LIKE 'UNIQ%' 
    AND TABLE_SCHEMA = 'your_database_name' 
    AND TABLE_NAME = 'your_table_name'; 

Thật không may mysql không tạo điều kiện cho việc loại bỏ các chỉ số dựa trên một kết quả truy vấn. Bạn có thể thực thi đầu ra của truy vấn sau để xóa tất cả các cột duy nhất trong 2 truy vấn:

SELECT CONCAT(
    'ALTER TABLE ', 
    TABLE_NAME, 
    ' DROP INDEX ', 
    CONSTRAINT_NAME, 
    '; -- drops ', 
    COLUMN_NAME, 
    ' constraint' 
) 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE 
    CONSTRAINT_NAME LIKE 'UNIQ%' 
    AND TABLE_SCHEMA = 'your_database_name'; 
Các vấn đề liên quan