0

私はトリガーの初心者ですが、私の場合はコード1が必要だと思います:

CREATE TABLE `events` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `device_id` varchar(15) DEFAULT NULL,
  `event_type` varchar(15) DEFAULT NULL,
  `event_value` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4987 DEFAULT CHARSET=utf8$$

CREATE TABLE `sequence` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `device_id` varchar(15) DEFAULT NULL,
  `values_sum` varchar(15) DEFAULT NULL,
  `event_value` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4987 DEFAULT CHARSET=utf8$$

イベント テーブルの行がいつ挿入されるかが必要です。event_type が 1 か 2 かを確認してください

1 の場合、2 番目のテーブルに最初のデータをコピーし、次の挿入まで 1 イベントごとに追加する必要があり、event_type は 2..

私はそれを行う方法がわかりません、どんな助けも大歓迎です...

4

1 に答える 1

1

開始するのに役立つサンプル構文を次に示します。

values_sumテーブルの列に何を格納するかを理解する必要がありsequenceます。

また、以下のトリガーはid、イベント テーブルからシーケンス テーブルに値をコピーしています。これは、他のプロセスがテーブルに新しい ID 値を挿入して生成した場合に問題になります (つまり、重複キーの例外) sequence

DELIMITER $$

CREATE TRIGGER `trg_events_ai` 
  AFTER INSERT ON `events`
  FOR EACH ROW
  BEGIN
    IF NEW.event_type = 1 THEN
      INSERT INTO `sequence` (`id`, `device_id`, `values_sum`, `event_value`)
      VALUES NEW.id, NEW.device_id, NULL, NEW.event_value);
    END IF;
  END$$

DELIMITER ;

この例のトリガーは、イベント テーブルへの挿入後に「起動」されます。event_type 列が 1 であるイベント テーブルに行が挿入されると、このトリガーはシーケンス テーブルに対して対応する INSERT を発行します。始めるには十分なはずです。

于 2012-12-18T20:56:30.140 に答える