如何从MySQL表中删除约束?

dee*_*kar 231 mysql constraints foreign-keys alter

我想从我的表中删除约束.我的查询是:

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误:

#1064 - 您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便FK_tbl_magazine_issue_mst_users在第1行的"约束" 附近使用正确的语法

Boh*_*ian 398

Mysql有一个特殊的语法来删除外键约束:

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
Run Code Online (Sandbox Code Playgroud)

  • Postgres,MSSQL和Oracle都有`alter table .. drop constraint`.似乎是奇怪的MySQL. (18认同)

Wel*_*ndo 51

我有同样的问题,我得用这个代码来解决:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
Run Code Online (Sandbox Code Playgroud)

  • 这可以被视为比公认的解决方案更正确,因为简单地删除外键不会删除索引。当然,索引可能是单独创建的,但如果它是由于首先添加外键而创建的,那么它不会通过删除外键来删除。 (3认同)
  • 作为单个命令:`ALTER TABLE table_name如果存在id则删除外键,如果ID id_fk则退出索引。 (2认同)

小智 25

DROP CONSTRAINT在MySQL中没有这样的东西 .在你的情况下,你可以使用DROP FOREIGN KEY.


Rob*_*ght 11

如果约束不是外键,例如.一个使用'UNIQUE CONSTRAINT(colA,colB)'添加,然后它是一个可以使用删除的索引ALTER TABLE ... DROP INDEX ...


roe*_*eor 9

同样很好,您可以暂时禁用mysql数据库中的所有外键检查: SET FOREIGN_KEY_CHECKS=0; 并再次启用它: SET FOREIGN_KEY_CHECKS=1;


jbo*_*ins 7

为了给罗伯特·奈特(Robert Knight)的答案增加一点点,因为帖子的标题本身没有提到外键(并且由于他的标题没有完整的代码示例,而且由于SO的注释代码块的显示效果不及答案的代码好,块),我将其添加为唯一约束。这些工作之一都可以消除约束:

ALTER TABLE `table_name` DROP KEY `uc_name`;
Run Code Online (Sandbox Code Playgroud)

要么

ALTER TABLE `table_name` DROP INDEX `uc_name`;
Run Code Online (Sandbox Code Playgroud)


Luk*_*zda 5

删除约束的最简单方法是使用MySQL 8.0.19ALTER TABLE tbl_name DROP CONSTRAINT symbol;中引入的语法:

从 MySQL 8.0.19 开始,ALTER TABLE 允许使用更通用(和 SQL 标准)语法来删除和更改任何类型的现有约束,其中约束类型由约束名称确定

ALTER TABLE tbl_magazine_issue DROP CONSTRAINT FK_tbl_magazine_issue_mst_users;
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示