我有张桌子看起来像这样:
计数器:
client_id,provider1,provider2,provider3,provider3
列名[provider1,provider2,...]是提供者的id,它存储在另一个名为"providers“的表中。
我需要的是,当一个新的提供程序被插入到"proviers“数据库中时,触发器会自动在”计数器“表中添加另一列,但我似乎无法得到它。
到目前为止,这就是我所拥有的:
CREATE TRIGGER `providers_AFTER_INSERT` AFTER INSERT ON `providers` FOR EACH ROW
ALTER TABLE `counters` ADD NEW.prov_id int;错误在“.”处。在“NEW;”和“prov_id”之间的错误:
Syntax error: unexpected '.' (dot)我猜它需要一个字符串值作为列的名称,所以我搜索并找到了一种将它作为字符串传递的方法:
CREATE TRIGGER `providers_AFTER_INSERT` AFTER INSERT ON `providers` FOR EACH ROW
ALTER TABLE `counters` ADD CAST(NEW.prov_id AS CHAR CHARACTER SET utf8) int;但这显示我在“添加”中出现了一个错误,表示这是意外的。
还尝试用括号{NEW.prov_id}包围变量,但没有结果,它在'ADD‘子句中给出了相同的错误。
此外,在搜索时,我还在一些帖子中说它不起作用,而有些人说它确实有效,而那些说它工作的人不使用变量作为列名。
如何纠正此错误?这是可行的吗?
我的MySQL是v5.0,如果有必要,我可以升级它。
谢谢您的光临
发布于 2017-02-24 23:59:05
简短的回答:不可能。
ALTER是一种所谓的“DDL-语句”(数据定义语言),它不同于“DML-语句”(数据操作语言)。
DDL-在触发器中不允许语句,afaik。
要做到这一点,需要动态SQL,因为DDL中的表名不是变量。
不幸的是,触发器中不允许动态SQL。当试图在触发器中执行准备语句时,mysql会抛出一个错误:
Dynamic SQL is not allowed in stored function or trigger在mysql文档中有更多信息:https://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html
https://stackoverflow.com/questions/42450231
复制相似问题