gpt4 book ai didi

mysql - 如何修复存储函数/触发器中的 "Can' t 更新表 testtab

转载 作者:行者123 更新时间:2023-11-29 16:01:50 25 4
gpt4 key购买 nike

我已经创建了一个表

CREATE TABLE testtab (
`id` int(11) NOT NULL AUTO_INCREMENT,
`customer_id` bigint(20) DEFAULT NULL,
`food_id` int(11) DEFAULT NULL,
`created_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
)

表格包含以下行

INSERT INTO testtab (`customer_id`, `food_id`, `created_date`)
VALUES ('433', '9', '2019-05-14 12:00:54');

现在的条件是对于特定的 customer_id,只能有一行 food_id 为 8 或 9。

现在我尝试添加以下插入语句

INSERT INTO testtab (`customer_id`, `food_id`, `created_date`)
VALUES ('433', '8', '2019-05-14 12:00:54');

现在它要么失败,要么在插入后立即被删除(带有 tag_id=8 的记录)。我使用了下面的触发器。但不幸的是我遇到了错误

无法更新存储函数/触发器中的表“testtab”,因为它已被调用此存储函数/触发器的语句使用。

DELIMITER $$

USE `ipay`$$

DROP TRIGGER /*!50032 IF EXISTS */ `testtabTrigger`$$

CREATE

TRIGGER `testtabTrigger` AFTER INSERT ON `testtab`
FOR EACH ROW BEGIN

IF ((SELECT COUNT(*) FROM testtab WHERE food_id =9 AND customer_id = new.customer_id) =1 && new.food_id = 8) THEN
DELETE FROM testtab WHERE food_id = 8 AND customer_id = new.customer_id;
END IF;


END;
$$

DELIMITER ;

最佳答案

这个想法是你做这样的事情:

CREATE TRIGGER `testtabTrigger` BEORE INSERT ON `testtab` 
FOR EACH ROW
BEGIN
IF (EXISTS (SELECT COUNT(*)
FROM testtab tt
WHERE tt.food_id = 9 AND
tt.customer_id = new.customer_id
) AND
new.food_id = 8
) THEN
signal sqlstate '45000' set message_text = 'Attempted insert of 8 when there is a 9';
END IF;
END;

关于mysql - 如何修复存储函数/触发器中的 "Can' t 更新表 testtab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56124457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com