我想从我的表中删除约束。我的查询是:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
但我得到一个错误:
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“约束 FK_tbl_magazine_issue_mst_users”附近使用正确的语法
CHECK
约束,则无需删除它,因为没有创建实际约束。您可以从 information_schema.table_constraints
中选择进行验证,甚至可以一遍又一遍地运行 add constraint
而不会出现任何错误。 MySQL 不支持 CHECK
约束,但允许 SQL 旨在创建它们(而不实际创建约束)。
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`;
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
DROP FOREIGN KEY IF EXISTS
语法。 MariaDB 支持它。
MySQL 中没有 DROP CONSTRAINT
这样的东西。在您的情况下,您可以改用 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 或框架使用与默认 FK_[parent table]_[referenced table]_[referencing field]
不同的外键命名约定,因为它们可以更改。
例如,Laravel 使用 [parent table]_[referencing field]_foreign
作为命名约定。您可以使用此查询显示外键的名称,如 here 所示:
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/
CONSTRAINT CHECK(a > b)
。对于外键约束,您似乎仍然需要 DROP FOREIGN KEY
语法,至少在 MariaDB 10.2 版中
删除约束的最简单方法是使用 MySQL 8.0.19 中引入的语法 ALTER 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;
转到表的结构视图 您将在顶部看到 2 个选项 a.表结构 b.关系视图。现在点击 Relation view ,在这里你可以删除你的外键约束。你会在这里得到所有的关系。
在 MySQL 中,您必须指定要删除的约束类型:
例子:
CONSTRAINT `shop_ibfk_1` FOREIGN KEY (`fb_user_id`) REFERENCES `fb_user` (`id`),
CONSTRAINT `shop_chk_1` CHECK ((`import_lock` in (0,1)))
您将删除的第一个:
alter mytable shop drop FOREIGN KEY `shop_ibfk_1`;
第二个
alter mytable drop CHECK `shop_chk_1`;
这将适用于 MySQL 以消除约束
alter table tablename drop primary key;
alter table tablename drop foreign key;
DROP PRIMARY KEY
不应该工作。 DROP FOREIGN KEY
有效,但您需要指定 drop
的对象。例如 ALTER TABLE tablename DROP FOREIGN KEY id_name_fk
alter table .. drop constraint
。 MySQL 似乎是一个奇怪的问题。