0
    DELIMITER $$
    DROP TRIGGER IF EXISTS ravi.`after_insert`$$
    CREATE
   /*[DEFINER = { user | CURRENT_USER }]*/
   TRIGGER `ravi`.`after_insert` AFTER UPDATE
  ON `ravi`.`user_data`
  FOR EACH ROW 
  BEGIN`
 IF(NEW.field1 !=OLD.field1)THEN
 INSERT INTO logs_data(uri,field_id,old_value,new_value,modified_date)
 VALUES(NEW.uri,"filed1",OLD.field1,NEW.field1,NOW());
 END IF;
 IF(NEW.field2!=OLD.field2)THEN
 INSERT INTO logs_date(uri,field_id,old_value,new_value,modified_date)
 VALUES(NEW.uri,"field2",OLD.field2,NEW.field2,NOW());
 END IF;
 END$$

 DELIMITER ;

値が 2 番目のテーブルに挿入されていませんが、トリガーが実行されています トリガーが機能していません

4

1 に答える 1

0
  1. 関数IFの代わりにステートメントを使用するつもりだったと思いますIF()
  2. イベントを使用しているため、トリガーの名前after_insertはわかりにくいAFTER UPDATE
  3. 'filed1'代わりに'field1'、さらに重要なlog_dateことにlog_data、2 番目のINSERTステートメントの代わりにいくつかのタイプミスもあります。

つまり、トリガーはおそらく次のようになります

DELIMITER $$
CREATE TRIGGER user_data_after_update
AFTER UPDATE ON user_data
FOR EACH ROW 
BEGIN
    IF NEW.field1 != OLD.field1 THEN
        INSERT INTO logs_data(uri, field_id, old_value, new_value, modified_date)
        VALUES(NEW.uri, 'field1', OLD.field1, NEW.field1, NOW());
    END IF;
    IF NEW.field2 != OLD.field2 THEN
        INSERT INTO logs_data(uri, field_id, old_value, new_value, modified_date)
        VALUES(NEW.uri, 'field2', OLD.field2, NEW.field2, NOW());
    END IF;
END$$
DELIMITER ;

これがSQLFiddleのデモです

于 2013-08-08T18:35:01.117 に答える