【发布时间】:2020-09-03 01:22:14
【问题描述】:
这看起来很简单,但仍然是一个挑战。我尽可能简化了我的问题。
我有这个带有一条记录的 test_table:
id | cost_per_record
1 | 24
在 INSERT 之后,我希望表格如下所示:
id | cost_per_record
1 | 12
2 | 12
从我工作的应用程序中,我无法调用存储过程,所以我使用的代码:
DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
`id` int(11) NOT NULL,
`cost_per_record` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `test_table` (`id`, `cost_per_record`) VALUES (1,24);
DELIMITER $$
CREATE TRIGGER `test_insert` BEFORE INSERT ON `test_table` FOR EACH ROW
BEGIN
update `test_table` set `cost_per_record` = 12
where `id` = 1;
END
$$
DELIMITER ;
INSERT INTO `test_table` (`id`, `cost_per_record`) VALUES
(2,12);
我通常收到的错误(在其他尝试中也是如此):
MySQL said: Documentation
#1442 - Can't update table 'kan_test_update' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
相信我,我在这个论坛上阅读了很多答案,还跑到博客上说这是impossible。但我(仍然)不接受这一点。所以..任何解决方案...谢谢...
【问题讨论】:
-
开始时有 2 条或更多条记录会怎样?你的要求有点不寻常。
-
'但我(仍然)不接受这个' - 你应该。顺便说一句,在插入触发器之前,您可以调整 NEW 的值。柱子。详情请阅读dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html。
-
您要解决什么问题?也许替代设计更适合您的场景
-
正如我所说,我尽可能简化了我的问题,我只想在插入之后或之前更新同一张表中的其他记录
-
谢谢@P.Salmon 我想我需要第二张桌子。
标签: mysql triggers database-trigger insert-update mysql-error-1442