触发具有已定义值的插入

时间:2012-12-18 19:47:03

标签: mysql

我是Triggers的新手,但我认为我的代码需要一个代码:

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 ..

我不知道怎么做,欢迎任何帮助...

1 个答案:

答案 0 :(得分: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。应该足以让你入门。