0

我是触发器的新手,但我认为我的案例需要代码一:

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 我需要在第二个表中复制第一个数据并添加每个 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 回答