我创建了它们,但我忘记了它们是哪些。
我只想
- 展示它们。
- 移除表格上的所有限制。
select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where table_name = 'table_name' and constraint_type = 'UNIQUE';
这种方法输出的结果可能不够优雅,但易于记忆:
SHOW CREATE TABLE table_name;
select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where CONSTRAINT_SCHEMA = 'mysql'
show indexes from table_name;
原帖要求单个表格,这个代码可以实现。
另外,如果去掉最后的 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';