📅  最后修改于: 2023-12-03 14:55:37.308000             🧑  作者: Mango
本篇文章介绍如何使用 SQL 查询语句生成主键或外键删除语句。
要查询表中的主键,可以使用以下 SQL 语句:
SELECT
KCU.TABLE_SCHEMA,
KCU.TABLE_NAME,
KCU.CONSTRAINT_NAME,
KCU.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
ON TC.TABLE_SCHEMA = KCU.TABLE_SCHEMA
AND TC.TABLE_NAME = KCU.TABLE_NAME
AND TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME
WHERE
TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY
KCU.TABLE_SCHEMA,
KCU.TABLE_NAME,
KCU.CONSTRAINT_NAME,
KCU.ORDINAL_POSITION;
此查询返回三个字段:TABLE_SCHEMA
,TABLE_NAME
和 CONSTRANT_NAME
。这些字段组合起来表示主键所在的表和其名字。
此外,查询还返回一个名为 COLUMN_NAME
的字段。此字段包含主键所使用的列的名称。在生成删除语句时,需要使用此信息。
查询外键的方法与查询主键非常相似。可以使用以下 SQL 语句:
SELECT
F.TABLE_SCHEMA,
F.TABLE_NAME,
F.CONSTRAINT_NAME,
CU.COLUMN_NAME,
RC.TABLE_SCHEMA AS REFERENCED_TABLE_SCHEMA,
RC.TABLE_NAME AS REFERENCED_TABLE_NAME,
RC.COLUMN_NAME AS REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS F
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON F.CONSTRAINT_SCHEMA = CU.CONSTRAINT_SCHEMA
AND F.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
ON F.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
AND F.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
ORDER BY
F.TABLE_SCHEMA,
F.TABLE_NAME,
F.CONSTRAINT_NAME,
CU.ORDINAL_POSITION;
此查询返回六个字段:TABLE_SCHEMA
,TABLE_NAME
,CONSTRAINT_NAME
,COLUMN_NAME
,REFERENCED_TABLE_SCHEMA
和 REFERENCED_TABLE_NAME
。这些字段组合起来表示外键所在的表和其名字、引用表所在的数据库、表和列的名字。
在生成删除语句时,需要使用这些信息。主要是 TABLE_SCHEMA
,TABLE_NAME
和 CONSTRAINT_NAME
用于指示要删除的外键,REFERENCED_TABLE_SCHEMA
,REFERENCED_TABLE_NAME
和 REFERENCED_COLUMN_NAME
用于指示引用列。
有了查询结果,可以使用以下 SQL 语句生成删除主键或外键的语句:
ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME]
DROP CONSTRAINT [CONSTRAINT_NAME];
或者,如果要删除外键:
ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME]
DROP CONSTRAINT [CONSTRAINT_NAME];
这些 SQL 语句使用查询结果中的 TABLE_SCHEMA
,TABLE_NAME
和 CONSTRAINT_NAME
字段中的值。对于外键,还需要使用查询结果中的 REFERENCED_TABLE_SCHEMA
,REFERENCED_TABLE_NAME
和 REFERENCED_COLUMN_NAME
字段中的值。
本文介绍了如何使用 SQL 查询语句生成删除主键或外键的语句。您可以将这些查询与 ALTER TABLE
语句结合使用来删除不再需要的约束。