0

別の列に同じ値を設定しながら、mysqlトリガーのテーブル列の値を同期する必要があります。これが私のテーブルの例です:

id___MP____sweek

1____2_____1

2____2_____1

3____1 _____2

4____1 _____2

5____3_____3

6____3_____3

たとえば、ユーザーが最初の行のMP(id = 1)を2から4に変更した場合、同じ週のMPの値を変更する必要があります(たとえば、id = 2、MPも4になります)。

動作しないBEFOREUPDATEティガーを作成しました。

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にあります。

もう1つのトリックは、FEDERATEDエンジンを試して使用することです。RolandBoumanによる関連記事を参照してください。繰り返しますが、これは汚いハックです。

私はおそらく、アプリケーションに同じトランザクション内でそのことを行わせるでしょう。

于 2012-07-06T07:24:17.257 に答える