我可以在不使用存储过程的情况下实现此目的。这是我的表格:
---帐户表
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表中?是的,我实际上想永久删除帐户表中的记录。我不想使用存储过程。
答案 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 */;;