MySQL触发删除,更新记录?

时间:2014-12-15 03:10:35

标签: mysql triggers

我可以在不使用存储过程的情况下实现此目的。这是我的表格:

---帐户表

DROP TABLE IF EXISTS `account`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `account` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_god` int(11) DEFAULT NULL,
  `date_created` datetime DEFAULT CURRENT_TIMESTAMP,
  `deleted` int(11) DEFAULT '0',
  `history` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

---触发器

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER account_update AFTER UPDATE ON account FOR EACH ROW INSERT INTO account_history VALUES(NEW.id, NEW.id_god, NEW.date_created, NEW.deleted, NEW.history) */;;

---帐户历史表

DROP TABLE IF EXISTS `account_history`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `account_history` (
  `id` int(11) DEFAULT NULL,
  `id_god` int(11) DEFAULT NULL,
  `date_created` datetime DEFAULT NULL,
  `deleted` int(11) DEFAULT '0',
  `history` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

我的第一张桌子,'帐户'几乎是一个普通的表格,但请注意我有一个名为'删除的字段'默认为0.我有更新的工作触发器'将帐户记录复制到account_history表。我也有类似的插入触发器,我省略了。当我删除记录时,我想将已删除的值设置为1,以便在我的account_history表中跟踪它的删除。

最初我打算运行更新查询,在我的帐户表中将删除设置为1,这会触发更新'然后用第二个查询删除记录。我想知道我是否可以通过删除来实现我想要的操作。我可以设置一个触发器,在删除'上设置已删除= 1'在我的帐户表中或直接在我的account_history表中?是的,我实际上想永久删除帐户表中的记录。我不想使用存储过程。

1 个答案:

答案 0 :(得分:1)

知道了,只需要将insert语句添加到我的触发器

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER account_delete BEFORE DELETE ON account
FOR EACH ROW BEGIN
INSERT INTO account_history (id,id_god,date_created,deleted,history) VALUES (OLD.id,OLD.id_god,OLD.date_created,1,OLD.history);
END */;;