0

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

1 回答 1

0

在 MySQL 触发器中,您无法影响同一张表上的其他行。你会想说这样的话:

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

但是——对不起——不行。这方面有一些技巧——也有丑陋的。如果您的表是 MyISAM,您可以用 MERGE 表将其包装起来,然后对 MERGE 表进行操作(此时 MySQL 并没有意识到您实际上是在修改它)。

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

另一个技巧是尝试使用 FEDERATED 引擎。请参阅Roland Bouman的相关帖子。同样,这是一个肮脏的黑客。

我可能会让应用程序在同一个事务中做这件事。

于 2012-07-06T07:24:17.257 回答