次のクエリを使用すると、一意の制約のリストをかなり簡単に取得できます。
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE'
しかし、各一意制約が適用される列のリストを取得するにはどうすればよいですか?
見る INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
Edは正しいです。列は制約列の使用状況ビューに表示されます。これがそのSQLです。
select TC.Constraint_Name, CC.Column_Name from information_schema.table_constraints TC
inner join information_schema.constraint_column_usage CC on TC.Constraint_Name = CC.Constraint_Name
where TC.constraint_type = 'Unique'
order by TC.Constraint_Name
SELECT *
FROM sys.indexes i
JOIN sys.index_columns ic
ON i.index_id = ic.index_id
AND i.object_id = ic.object_id
WHERE i.is_unique_constraint = 1;
MySQLユーザーの参照用に、以下のクエリでも同じことが実現できます。
テーブルの一意の制約を見つけるには
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE' and table_name='db_my_table'
すべての列を含む一意の列リストを見つけるには
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'
必要なビューを持つ一意の列リストを見つける
select CONSTRAINT_NAME,COLUMN_NAME,TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'