gpt4 book ai didi

mysql - 如何仅针对以 "Table_"开头的表创建在更新后触发的触发器

转载 作者:行者123 更新时间:2023-12-01 15:07:35 24 4
gpt4 key购买 nike

我正在尝试制作一个在特定条件下触发的触发器在 UPDATE 之后,在以特定字符串(例如“A_”)开头的表上。

CREATE TABLE `Table_TEST` (
`id` INT(11) NULL DEFAULT NULL,
`A` INT(11) NULL DEFAULT NULL,
`B` INT(11) NULL DEFAULT NULL,
`C` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;

触发器应使 SUM(“A 列”)减去 SUM(“B 列”)直到更新行的索引,并将此 SUM 写入该行的“C”列。

CREATE DEFINER=`root`@`localhost` 
TRIGGER `Table_TEST_before_insert` BEFORE UPDATE ON `Table_TEST` FOR EACH ROW
BEGIN
SET new.C = (SUM(new.A)-SUM(new.B));
END

这个触发器不工作并带来这个失败

UPDATE `Testdb`.`Table_TEST` SET `b`='4' WHERE  `id`=1 LIMIT 1;
/* SQL Fehler (1111): Invalid use of group function */

在此之后,它应该根据给定的公式更新该索引之后的“C”列中的所有其他值,直到相应的索引。

现在我在 php 中编写了一个函数,我在我的 php 脚本中的数据库中每次更新后追加该函数。但其实不是我想要的。

我希望将此作为例程/触发器。

我试过的看起来像这样,但请注意它不起作用

CREATE DEFINER=`root`@`localhost`
TRIGGER `TABLE_1_before_update` BEFORE UPDATE ON `TABLE_1` FOR EACH ROW
BEGIN
SET new.C = (SUM(new.A)-SUM(new.B)) WHERE id=NEW.id;
END

我得到的失败是: SQL Fehler (1064):您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 'WHERE id=NEW.id; 附近使用的正确语法。 END' 在第 2 行

你能帮帮我吗?

最佳答案

好吧,我认为您可以选择表格,然后执行触发器。

SELECT `TABLE_NAME`
FROM information_schema.tables
WHERE table_schema='<your-database-name>'
AND `TABLE_NAME` LIKE 'a%'

编辑:

未测试,但这也可以工作(如果不行,只需使用先前的查询选择表名,然后按照我之前所说的创建每个触发器)。

CREATE 
DEFINER=`user`@`localhost`
TRIGGER `trigger_name` AFTER UPDATE
ON (
SELECT `TABLE_NAME`
FROM information_schema.tables
WHERE table_schema='<your-database-name>'
AND `TABLE_NAME` LIKE 'a%'
) FOR EACH ROW

BEGIN
SET new.C = (SUM(new.A)-SUM(new.B)) WHERE id=NEW.id;
END

注意:确保替换<your-database-name>为您的数据库名称。

关于mysql - 如何仅针对以 "Table_"开头的表创建在更新后触发的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38553169/

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