【发布时间】:2015-02-01 20:40:29
【问题描述】:
我有一张表 country_group
+------+----------+--------+
| code | group_id | weight |
+------+----------+--------+
| me | 1 | 50.00 |
+------+----------+--------+
| me | 2 | 10.00 |
+------+----------+--------+
| me | 3 | 40.00 |
+------+----------+--------+
对我来说,对于每个国家/地区,列权重的总和为 100 非常重要。我在这里要做的是,当我删除其中一行时,我需要更改该国家/地区的权重值,以便所有权重的总和为那个国家仍然是 100。我想在我的数据库中为此设置触发器。
例如,如果我删除权重为 10.00 的行,则表格应如下所示:
+------+----------+--------+
| code | group_id | weight |
+------+----------+--------+
| me | 1 | 55.00 |
+------+----------+--------+
| me | 3 | 45.00 |
+------+----------+--------+
所以这是我的触发器:
CREATE DEFINER = CURRENT_USER TRIGGER extensionui2.country_group_AFTER_DELETE
AFTER DELETE ON country_group
FOR EACH ROW
BEGIN
DECLARE w FLOAT(5,2);
DECLARE c INT;
DECLARE s FLOAT(5,2);
SET w = OLD.weight;
SELECT count(*) into c FROM country_group WHERE code = OLD.code;
SET s = w / c;
UPDATE country_group SET weight = weight + s WHERE code = OLD.code;
END;
但我收到此错误:
Operation failed: There was an error while applying the SQL script to the database.
Executing:
DELETE FROM `extensionui2`.`country_group` WHERE `code`='ms' and`group_id`='9';
ERROR 1442: 1442: Can't update table 'country_group' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
SQL Statement:
DELETE FROM `extensionui2`.`country_group` WHERE `code`='ms' and`group_id`='9'
我需要在触发代码中进行哪些更改才能使其正常工作?
【问题讨论】:
标签: mysql triggers sql-update sql-delete