我想从我的表中删除约束。 我的查询是:
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
来代替。
如果约束是不是外键,例如。 一个使用“唯一约束(可乐,COLB)”加入那么可以使用被丢弃的索引ALTER TABLE ... DROP INDEX ...
此外真好,可以暂时禁用从MySQL数据库中的所有外键检查: SET FOREIGN_KEY_CHECKS=0;
并再次启用它: SET FOREIGN_KEY_CHECKS=1;
为了一点点添加到罗伯特骑士的答案,因为文章的标题本身并没有提及外键(和,因为他不具备完整的代码样本,因为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查询及其正确的名称外键。
对于那些来到这里使用MariaDB的:
需要注意的是MariaDB的允许一般DROP CONSTRAINT语句,例如用于丢弃检查约束:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
https://mariadb.com/kb/en/library/alter-table/
这将适用于MySQL的下降限制
alter table tablename drop primary key;
alter table tablename drop foreign key;