Je peux obtenir une liste de contraintes uniques assez facilement avec la requête suivante:
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE'
Mais comment obtenir une liste des colonnes auxquelles s'applique chaque contrainte unique?
Voir INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
Ed est correct, les colonnes sont exposées sur la vue d'utilisation des colonnes de contraintes, voici le SQL pour cela.
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;
Juste pour référence aux utilisateurs de mySQL, la même chose peut être obtenue avec les requêtes ci-dessous:
Pour rechercher une contrainte unique sur une table
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE' and table_name='db_my_table'
Pour rechercher une liste de colonnes unique avec toutes les colonnes
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'
pour trouver une liste de colonnes unique avec la vue requise
select CONSTRAINT_NAME,COLUMN_NAME,TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'