如何删除未显式命名、关联其他表的外键约束
删除未显式命名的外键约束方法
你建表时没有给外键显式命名的情况下,数据库会自动生成唯一的约束名,你只需要先查询到系统自动生成的约束名,再执行删除操作即可,不同数据库的操作方法如下:
MySQL 操作步骤
- 执行以下SQL查询Toy表关联Warehouse表的外键约束名
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Toy' AND REFERENCED_TABLE_NAME = 'Warehouse' AND REFERENCED_COLUMN_NAME = 'NUMBER';
- 执行删除语句,把下方的
[查询到的约束名]替换为上一步得到的结果即可,常见的自动生成格式类似toy_ibfk_1
ALTER TABLE Toy DROP FOREIGN KEY `[查询到的约束名]`;
PostgreSQL 操作步骤
- 执行以下SQL查询Toy表的外键约束名
SELECT constraint_name FROM information_schema.table_constraints WHERE table_name = 'toy' AND constraint_type = 'FOREIGN KEY';
- 执行删除语句,替换对应的约束名即可
ALTER TABLE Toy DROP CONSTRAINT [查询到的约束名];
优化建议
后续建表时建议显式命名外键约束,避免每次删除都要查询约束名,你示例中的建表语句可以修改为如下格式:
CREATE TABLE Toy ( NUMBER int(5) NOT NULL, SIZE int(5) NOT NULL, TYPE varchar(15) NOT NULL, PRICE int(10) NOT NULL, PRIMARY KEY(NUMBER), CONSTRAINT fk_toy_warehouse_number foreign key (NUMBER) references Warehouse(NUMBER) );
后续需要删除该外键时直接执行以下语句即可:
ALTER TABLE Toy DROP FOREIGN KEY fk_toy_warehouse_number;
内容的提问来源于stack exchange,提问作者webdesignnoob
相关产品推荐
相关产品推荐

