mysql 外键notnull,MySQL外键阻止删除表 – 但表是空的

为什么删除空表会产生外键错误?

在MySQL中,我有一个包含以下定义的表

CREATE TABLE `enterprise_rma` (

`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'RMA Id',

`status` varchar(32) DEFAULT NULL COMMENT 'Status',

`is_active` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT 'Is Active',

`increment_id` varchar(50) DEFAULT NULL COMMENT 'Increment Id',

`date_requested` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'RMA Requested At',

`order_id` int(10) unsigned NOT NULL COMMENT 'Order Id',

`order_increment_id` varchar(50) DEFAULT NULL COMMENT 'Order Increment Id',

`store_id` smallint(5) unsigned DEFAULT NULL COMMENT 'Store Id',

`customer_id` int(10) unsigned DEFAULT NULL,

`customer_custom_email` varchar(255) DEFAULT NULL COMMENT 'Customer Custom Email',

PRIMARY KEY (`entity_id`),

KEY `IDX_ENTERPRISE_RMA_STATUS` (`status`),

KEY `IDX_ENTERPRISE_RMA_IS_ACTIVE` (`is_active`),

KEY `IDX_ENTERPRISE_RMA_INCREMENT_ID` (`increment_id`),

KEY `IDX_ENTERPRISE_RMA_DATE_REQUESTED` (`date_requested`),

KEY `IDX_ENTERPRISE_RMA_ORDER_ID` (`order_id`),

KEY `IDX_ENTERPRISE_RMA_ORDER_INCREMENT_ID` (`order_increment_id`),

KEY `IDX_ENTERPRISE_RMA_STORE_ID` (`store_id`),

KEY `IDX_ENTERPRISE_RMA_CUSTOMER_ID` (`customer_id`),

CONSTRAINT `FK_ENTERPRISE_RMA_CUSTOMER_ID_CUSTOMER_ENTITY_ENTITY_ID` FOREIGN KEY (`customer_id`) REFERENCES `customer_entity` (`entity_id`) ON DELETE SET NULL ON UPDATE CASCADE,

CONSTRAINT `FK_ENTERPRISE_RMA_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON DELETE SET NULL ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='RMA LIst';

我正在尝试DROP这个表,但每当我这样做时,我收到以下错误.

Cannot delete or update a parent row: a foreign key constraint fails

我不明白的是,桌子已经是空的.如果我SELECT * FROM enterprise_rma;,则不返回任何行(受影响的是0行)

和SHOW ENGINE INNODB状态;没有任何用处.

我知道我可以用以下方法解决这个问题

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE enterprise_rma;

SET FOREIGN_KEY_CHECKS=0;

但我不明白如果表中没有数据,外键约束如何失败.我不明白MySQL的外键模式是否有细微之处?当发生这种情况时,MySQL会被损坏还是处于无效状态?有自己排除故障的方法吗?

解决方法:

您不应该删除另一个依赖表的父表,即使它没有数据.因为如果删除父项,那么您将永远无法在子项中插入任何数据.您必须首先删除任何引用enterprise_rma的子表.

但是有些东西与你的描述不符.你说丢失表时遇到了问题,但是关于外键检查的例子显示你使用了DELETE.

DELETE与DROP TABLE不同. DELETE之后,表中没有行,但表仍然存在.在DROP TABLE之后,该表不存在,即如果运行SHOW TABLES则不会显示该表.

标签:mysql,foreign-key

来源: https://codeday.me/bug/20190806/1597420.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值