如何在mysql触发器中同步表列中的值

时间:2012-07-06 02:40:49

标签: mysql triggers sync where

我需要在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 ;

1 个答案:

答案 0 :(得分:0)

在MySQL触发器中,您无法影响同一个表中的其他行。 你想说的是:

UPDATE my_table SET MP=NEW.MP WHERE sweek = NEW.sweek

但是 - 对不起 - 没有去。 这周围有黑客 - 也有丑陋的黑客。 如果您的表是MyISAM,您可以使用MERGE表将其包装起来,并在MERGE表上执行操作(MySQL当时并没有意识到您实际上正在乱砍它)。

然而,使用MyISAM作为存储引擎可能不是一件好事 - 今天的重点是InnoDB,这是一个更复杂的引擎。

另一个技巧是尝试使用FEDERATED引擎。请参阅Roland Bouman的相关文章。再次,这是一个肮脏的黑客。

我可能会让应用程序在同一个事务中执行该操作。