2012-07-06 45 views
0

我需要在mysql触发器中同步表格列中的值,而在另一列中具有相同的值。这里是我的表的例子:如何在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

从MySQL触发你是不是能够影响到在同一个表的其他行内。 你会想这样说:

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

但 - 对不起 - 没有去。 围绕着这个 - 也是丑陋的。 如果你的表是MyISAM,你可以用一个MERGE表来包装它,然后在MERGE表上进行操作(MySQL在这一点上并没有意识到你实际上正在窃听它)。然而,使用MyISAM作为存储引擎可能不是一件好事 - 今天的重点是InnoDB,一个更复杂的引擎。

另一个窍门是尝试使用FEDERATED引擎。查看Roland Bouman的相关文章。再次,这是一个肮脏的黑客。

我可能会让应用程序在相同的事务中执行此操作。

+0

谢谢你,谢尔米,你的有用答案。它看起来像我应该使用PHP来禁止用户提交多个条目,而不是尝试同步它们。尤金 – user1505571 2012-07-07 22:02:55