【问题标题】:MySQL trigger on Delete, update a record?MySQL触发删除,更新记录?
【发布时间】: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' 的触发器吗?是的,我实际上想从我的帐户表中永久删除记录。我不想使用存储过程。

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

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

    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 */;;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多