【发布时间】:2015-02-13 02:56:09
【问题描述】:
我可以在不使用存储过程的情况下实现这一点吗?这是我的表格:
--- 账户表
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 */;
我的第一个表“account”几乎是一个普通表,但请注意,我有一个名为“deleted”的字段默认为 0。我有一个工作触发器“on update”将帐户记录复制到 account_history 表。我也有一个类似的插入触发器,我省略了。当我删除一条记录时,我想将 deleted 的值设置为 1 以在我的 account_history 表中跟踪它的删除。
最初我打算运行更新查询以在我的帐户表中将删除设置为 1,这将触发“更新时”,然后使用第二个查询删除记录。我想知道我是否可以仅通过删除来实现我想要的操作。我可以在我的帐户表中或直接在我的 account_history 表中设置 deleted=1 'on delete' 的触发器吗?是的,我实际上想从我的帐户表中永久删除记录。我不想使用存储过程。
【问题讨论】: