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

时间:2009-12-02 23:04:09

标签: mysql database

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

我只想

  1. 展示他们。
  2. 删除表格上的所有约束。

5 个答案:

答案 0 :(得分:60)

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

答案 1 :(得分:8)

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

答案 2 :(得分:5)

这不会产生优雅的输出,但很容易记住:

SHOW CREATE TABLE table_name;

答案 3 :(得分:3)

此查询返回主键,唯一键和外键:

show indexes from table_name;

答案 4 :(得分:2)

OP要求提供一张表,这样做。

此外,删除最后一个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';