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

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

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

值得注意的是,如果您创建了CHECK约束,则无需删除它,因为不会创建实际约束。 您可以选择information_schema.table_constraints进行验证,甚至可以反复运行add constraint而不会出现任何错误。 MySQL不支持CHECK约束,但允许SQL创建它们(不实际创建约束)。

功能请求:外键:DROP CONSTRAINT作为DROP FOREIGN KEY的兼容性别名

MySQL中删除主键的可能重复

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

ALTER TABLE tbl_magazine_issue

DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users

Postgres,MSSQL和Oracle都有alter table .. drop constraint。似乎是奇怪的MySQL。

它说它不能丢弃外键约束中需要的"column2"beacuses。当我这样做时,我得到"Cant DROP column2;检查列/键是否存在"

好吧,我明白了,外来是一个单独的事情,只是将列连接到其他表格列。我有一个标准名称。此外,现在我现在可以安全地删除外键,而不会删除列本身

Wellington Lorindo的解决方案可以被视为更正确,因为简单地删除外键不会删除相关索引。当然索引可能是单独创建的,但如果它是由于首先添加外键而创建的,那么只需删除外键就不会删除它。

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

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;

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

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

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

SET FOREIGN_KEY_CHECKS=0;

并再次启用它:

<5233>

为罗伯特奈特的答案添加一点,因为帖子的标题本身没有提到外键(因为他没有完整的代码示例,因为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 = '' AND REFERENCED_TABLE_NAME = '

然后通过运行前面提到的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中

转到表格的结构视图

您将在顶部a看到2个选项。表格结构b。相关视图。

现在单击Relation视图,在这里可以删除外键约束。你会在这里得到所有的关系。

这很好,当你不知道id时,对我有用

这将适用于MySQL以减少约束

DROP PRIMARY KEY不应该有效。 DROP FOREIGN KEY有效,但您需要指定其drop。例如ALTER TABLE tablename DROP FOREIGN KEY id_name_fk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值