如何从我的MySQL表中删除约束?

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

ALTER TABLE `tbl_magazine_issue` DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users` 

但是我得到一个错误:

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

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

 ALTER TABLE tbl_magazine_issue DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users 

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

 ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`; ALTER TABLE `table_name` DROP INDEX `id_name_fk`; 

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

如果约束不是一个外键,例如。 一个使用'唯一约束(colA,colB)'添加,那么它是一个索引,可以使用ALTER TABLE ... DROP INDEX ...

  1. 转到表格的结构视图
  2. 您将在顶部看到2个选项a。表结构b。 关系视图
  3. 现在点击关系视图 ,在这里你可以放弃你的外键约束。 你会在这里得到所有的关系。

为了给Robert Knight的答案增加一点点,因为这个post的标题本身没有提到外键(因为他没有完整的代码样本,并且因为SO的评论代码块没有显示出答案的代码块),我会添加这个独特的约束。 其中任何一个都可以放弃这个限制:

 ALTER TABLE `table_name` DROP KEY `uc_name`; 

要么

 ALTER TABLE `table_name` DROP INDEX `uc_name`; 

一些ORM或框架对外键使用与默认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查询来删除外键,它是正确的名称。

这将在MySQL的作品放弃约束

 alter table tablename drop primary key; alter table tablename drop foreign key;