关于外键:如何从MySQL表中删除约束?

How to remove constraints from my MySQL table?

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

1
2
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

但是我收到了一个错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint FK_tbl_magazine_issue_mst_users' at line 1


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

1
2
ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users


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

1
2
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


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


还不错,您可以暂时禁用mysql数据库中的所有外键检查:

SET FOREIGN_KEY_CHECKS=0;

并再次启用它:
<5233>


为罗伯特奈特的答案添加一点,因为帖子的标题本身没有提到外键(因为他没有完整的代码示例,因为SO的注释代码块不像答案代码那样显示块),我将添加这个唯一约束。这些都可以降低约束:

1
ALTER TABLE `table_name` DROP KEY `uc_name`;

要么

1
ALTER TABLE `table_name` DROP INDEX `uc_name`;


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

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

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

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


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

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

1
2
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

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


  • 转到表格的结构视图
  • 您将在顶部a看到2个选项。表格结构b。相关视图。
  • 现在单击Relation视图,在这里可以删除外键约束。你会在这里得到所有的关系。

  • 这将适用于MySQL以减少约束