【发布时间】:2014-11-02 06:05:43
【问题描述】:
我一直在寻找这个错误,偶然发现了几个相同性质的问题, 但据我了解,他们似乎关心更新问题。我的源于删除条目。
我的桌子是这样制成的:
CREATE TABLE `product` (
`product_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT
'represents unique identifier for every existing products',
`code` varchar(20) NOT NULL,
`name` varchar(45) NOT NULL COMMENT 'description',
`price` decimal(11,4) NOT NULL,
`short_name` varchar(10) NOT NULL COMMENT
'name that can be used quickly to referenc or immediately know what is the product',
`count` bigint(19) unsigned NOT NULL DEFAULT '0',
`product_type_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`is_active` bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`product_id`),
KEY `product_product_typeFK_idx` (`product_type_id`),
CONSTRAINT `product_product_typeFK` FOREIGN KEY (`product_type_id`) REFERENCES
`product_type` (`product_type_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
然后它还有一些附带的TRIGGER 插入一些数据:
USE `RFVPOS`;
DELIMITER $$
CREATE TRIGGER `Product_BDEL` BEFORE DELETE ON `product` FOR EACH ROW
BEGIN
INSERT INTO `product_audit`
(product_id,
code,
name,
short_name,
price,
count,
delete_user,
delete_date
)
values
(OLD.product_id,
OLD.code,
OLD.name,
OLD.short_name,
OLD.price,
OLD.count,
CURRENT_USER(),
NOW()
);
END
这里也是'product_audit'的结构:
CREATE TABLE `product_audit` (
`product_audit_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product_id` mediumint(8) unsigned NOT NULL,
`code` varchar(20) NOT NULL,
`name` varchar(45) NOT NULL,
`price` decimal(11,4) NOT NULL,
`short_name` varchar(10) NOT NULL,
`count` bigint(19) unsigned NOT NULL,
`delete_user` varchar(45) NOT NULL,
`delete_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_audit_id`),
KEY `product_audit_productFK_idx` (`product_id`),
CONSTRAINT `product_audit_productFK` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
然后它会闪烁这个错误:
错误 1451:1451:无法删除或更新父行:外键约束失败
现在,让我感到困惑的是,没有其他表条目一直在使用我在“产品”表上删除的条目。这次删除应该很顺利。
所以,我尝试在“产品”表和 BLAM 上删除我的 TRIGGER,删除成功。
这意味着错误出在我的触发器上,您能帮我指出确切的位置(如果不在触发器上)以及为什么会发生错误。
【问题讨论】: