如何在MySQL中显示表的唯一约束?

42

我创建了它们,但我忘记了它们是哪些。

我只想

  1. 展示它们。
  2. 移除表格上的所有限制。
5个回答

85
select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where table_name = 'table_name' and constraint_type = 'UNIQUE';

24

这种方法输出的结果可能不够优雅,但易于记忆:

SHOW CREATE TABLE table_name;

8
select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where CONSTRAINT_SCHEMA = 'mysql'

7
这个查询返回主键、唯一键和外键:
show indexes from table_name;

4

原帖要求单个表格,这个代码可以实现。

另外,如果去掉最后的 where 子句,将会显示出在数据库中所有被唯一约束保护的列:

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';

很遗憾,mysql不支持根据查询结果删除索引。您可以执行以下查询的输出来在2个查询中删除所有唯一列:

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';

如何在连接后执行此查询? - HMT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接