我想从我的表中删除约束。我的查询是:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
但我得到一个错误:
#1064
- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以FK_tbl_magazine_issue_mst_users
在第 1 行的“约束”附近使用正确的语法
我想从我的表中删除约束。我的查询是:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
但我得到一个错误:
#1064
- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以FK_tbl_magazine_issue_mst_users
在第 1 行的“约束”附近使用正确的语法
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`;
DROP CONSTRAINT
在 MySQL中没有这样的东西 。在您的情况下,您可以DROP FOREIGN KEY
改用。
如果约束不是外键,例如。使用 'UNIQUE CONSTRAINT (colA, colB)' 添加一个,然后它是一个可以使用删除的索引ALTER TABLE ... DROP INDEX ...
为罗伯特·奈特的回答添加一点,因为帖子的标题本身没有提到外键(并且因为他没有完整的代码示例,并且因为 SO 的评论代码块没有显示以及答案的代码块),我将添加它以获得独特的约束。这些中的任何一个都可以消除约束:
ALTER TABLE `table_name` DROP KEY `uc_name`;
或者
ALTER TABLE `table_name` DROP INDEX `uc_name`;
也很好,您可以暂时禁用 mysql 数据库中的所有外键检查:
SET FOREIGN_KEY_CHECKS=0;
并再次启用它:
SET FOREIGN_KEY_CHECKS=1;
一些 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 查询及其正确名称来删除外键。
对于那些使用 MariaDB 来这里的人:
请注意,MariaDB 通常允许使用 DROP CONSTRAINT 语句,例如删除检查约束:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
删除约束的最简单方法是使用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;
这将适用于 MySQL 以消除约束
alter table tablename drop primary key;
alter table tablename drop foreign key;