【发布时间】:2014-07-22 11:54:47
【问题描述】:
我无法找到解决问题的方法。我需要能够为以下任务创建 TRIGGER/PROCEDURE/FUNCTION(以最适用的为准)。
我想计算多个列的值并将计算结果放入同一个 MYSQL 表中的列中。我希望每次执行将 UPDATES 或 INSERTS 数据插入/插入数据库表的操作时都进行计算。
我创建了这个 PROCEDURE 来演示我的方法(这个过程目前在 UPDATE product SET product.bawtry_stock = 之后抛出语法错误)
MYSQL
DELIMITER $$
CREATE PROCEDURE update_stock()
BEGIN
ON `product`
UPDATE product SET product.bawtry_stock =
kids_uk_j_105 + kids_c_17 + kids_c_18 + kids_c_19 +
kids_c_20 + kids_c_21,
quantity_c_size_26 + quantity_c_size_26_con_b,
product.chain_stock =
// as above with chain size suffixes
product.totalstock = bawtry_stock + chain_stock,
product.bawtry_value = bawtry_stock * wholesale_price,
product.chain_value = chain_stock * wholesale_price,
product.totalvalue = chain_value + bawtry_value;
END$$
DELIMITER ;
**MYSQL 表**
TBL NAME = 'product'
TBL COLUMNS = bawtry_stock,
chain_stock,
totalstock,
bawtry_value,
chain_value,
totalvalue,
product_id, (PKEY)
(together with all of the kids and quantity size columns)
因此,每次对产品表执行 UPDATE 或 INSERT 操作时 - 我需要计算列出的列中的所有值并将其输入到 bawtry_stock, chain_stock 等中。
如果这是不可能的,那么也许创建一个可以通过 PHP 调用的 FUNCTION/PROCEDURE,我将作为 CRONJOB 运行。
如果有人可以提供一些建议 - 将不胜感激。 谢谢
编辑
只是为了提供一些进一步的信息——我已经用类似的语法尝试了这个作为触发器:
触发
分隔符 $$
CREATE
TRIGGER `update_stock`
AFTER UPDATE ON `product`
FOR EACH ROW BEGIN
UPDATE product
SET bawtry_stock =
// ... same body logic as above
END$$
DELIMITER ;
这产生了MySQL Trigger: ERROR 1442 (HY000): Cant update table 'tbl' in stored function/trigger because it is already used by statement which invoked this stored function/trigger 错误。
我研究了一下,发现了这篇文章LINK
【问题讨论】:
-
“但是为什么我不能使用那个模式呢?”
-
Triggers can do that。现在请解释一下你卡在哪里了。
-
@RandomSeed - 请参阅上面的进一步编辑以解释我卡在哪里。
-
@RandomSeed - 所以这里最好的办法是创建一个触发器来修改通过 UPDATE 或 INSERT 操作更改的行。这是有道理的,因为您不需要每次只修改一行时计算表中的每一行。您能否充实一个示例,说明我的触发器如何仅用于一行?谢谢
标签: php mysql sql stored-procedures