我需要在mysql触发器的表列中同步值,而在另一列中具有相同的值。这是我的表的一个例子:
ID ___ MP ____ sweek
1 ____ 2 _____ 1
2 ____ 2 _____ 1
3 ____ 1 _____ 2
4 ____ 1 _____ 2
5 ____ 3 _____ 3
6 ____ 3 _____ 3
如果用户将第一行(id = 1)中的MP从2更改为4,则必须更改具有相同sweek的MP值(例如,id = 2,MP也变为4) )。
我写了一个不起作用的BEFORE UPDATE跳跳器:
USE moodle;
DELIMITER $$
CREATE TRIGGER trigger_course_minpostUPD BEFORE UPDATE ON moodle.mdl_course_sections FOR EACH ROW
BEGIN
IF NEW.MP <> OLD.MP THEN
BEGIN
SET @A=NEW.MP;
SET NEW.MP = @A
WHERE OLD.sweek=NEW.sweek;
END;
END IF;
END$$
DELIMITER ;
答案 0 :(得分:0)
在MySQL触发器中,您无法影响同一个表中的其他行。 你想说的是:
UPDATE my_table SET MP=NEW.MP WHERE sweek = NEW.sweek
但是 - 对不起 - 没有去。 这周围有黑客 - 也有丑陋的黑客。 如果您的表是MyISAM,您可以使用MERGE表将其包装起来,并在MERGE表上执行操作(MySQL当时并没有意识到您实际上正在乱砍它)。
然而,使用MyISAM作为存储引擎可能不是一件好事 - 今天的重点是InnoDB,这是一个更复杂的引擎。
另一个技巧是尝试使用FEDERATED引擎。请参阅Roland Bouman的相关文章。再次,这是一个肮脏的黑客。
我可能会让应用程序在同一个事务中执行该操作。