【发布时间】:2020-02-08 13:34:13
【问题描述】:
我创造了它们,但我忘记了它们是什么。
我只是想
- 给他们看。
- 删除表上的所有约束。
【问题讨论】:
我创造了它们,但我忘记了它们是什么。
我只是想
【问题讨论】:
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;
【讨论】:
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';
【讨论】: