286

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

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

但我得到一个错误:

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

4

11 回答 11

462

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

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
于 2013-01-02T12:35:05.947 回答
63

我有同样的问题,我必须用这段代码来解决:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
于 2013-08-19T15:40:52.787 回答
27

DROP CONSTRAINT在 MySQL中没有这样的东西 。在您的情况下,您可以DROP FOREIGN KEY改用。

于 2013-01-02T12:35:42.890 回答
17

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

于 2015-01-06T10:58:33.523 回答
9

为罗伯特·奈特的回答添加一点,因为帖子的标题本身没有提到外键(并且因为他没有完整的代码示例,并且因为 SO 的评论代码块没有显示以及答案的代码块),我将添加它以获得独特的约束。这些中的任何一个都可以消除约束:

ALTER TABLE `table_name` DROP KEY `uc_name`;

或者

ALTER TABLE `table_name` DROP INDEX `uc_name`;
于 2017-05-04T17:34:06.753 回答
9

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

于 2018-02-20T13:12:34.503 回答
4

一些 ORM 或框架使用与 default 不同的外键命名约定FK_[parent table]_[referenced table]_[referencing field],因为它们可以更改。

例如,Laravel[parent table]_[referencing field]_foreign用作命名约定。您可以使用此查询显示外键的名称,如下所示

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

然后通过运行前面提到的 DROP FOREIGN KEY 查询及其正确名称来删除外键。

于 2016-11-25T09:48:15.283 回答
3

对于那些使用 MariaDB 来这里的人:

请注意,MariaDB 通常允许使用 DROP CONSTRAINT 语句,例如删除检查约束:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

https://mariadb.com/kb/en/library/alter-table/

于 2018-08-30T15:33:55.780 回答
2

删除约束的最简单方法是使用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;

db<>小提琴演示

于 2020-01-20T21:38:45.360 回答
2
  1. 转到表的结构视图
  2. 您将在顶部看到 2 个选项 a.Table 结构 b。关系视图
  3. 现在点击Relation view,在这里你可以删除你的外键约束。你会在这里得到所有的关系。
于 2016-06-22T06:38:11.997 回答
-4

这将适用于 MySQL 以消除约束

alter table tablename drop primary key;

alter table tablename drop foreign key;
于 2015-05-03T06:30:35.140 回答