【问题标题】:MySQL Trigger - Copy A Row From Active Table To Archive TableMySQL 触发器 - 将行从活动表复制到存档表
【发布时间】:2012-03-26 10:43:15
【问题描述】:

我在为项目的数据库创建触发器时遇到问题

我以前从未在 MySQL 中使用过触发器,当我尝试执行以下代码时,它说第 4 行的“”处有错误...

这里是代码

CREATE TRIGGER archiveCar AFTER UPDATE ON mms_cars
 FOR EACH ROW BEGIN 
  IF NEW.active=2 THEN
   INSERT INTO mms_cars_sold SELECT * FROM mms_cars WHERE ad_id = OLD.ad_id;
   DELETE FROM mms_cars SELECT * FROM mms_cars WHERE ad_id = OLD.ad_id;
  END IF;
END;

我不确定我是否正确地创建了这个,所以请原谅任何业余错误。我的目标是当汽车的状态设置为 2(即已售出)时,将行的信息从活动表复制到存档表,以最大限度地提高活动表的搜索效率

希望有人能帮助我

亲切的问候

巴里

编辑

我现在有以下内容

DELIMITER //
CREATE TRIGGER archiveCar AFTER UPDATE ON mms_cars
FOR EACH ROW 
BEGIN 
 IF NEW.active=2 THEN
  INSERT INTO mms_cars_sold SELECT * FROM mms_cars WHERE ad_id=OLD.ad_id;
  DELETE FROM mms_cars WHERE ad_id=OLD.ad_id;
 END IF;
END //
DELIMITER;

它会产生这个错误:

1235 - 此版本的 MySQL 尚不支持“一个表具有相同操作时间和事件的多个触发器”

【问题讨论】:

  • 不带delete语句试试看,是否依旧报错
  • a) 从您的 DELETE 语句中删除 SELECT * FROM mms_cars b) 您可能还对 dev.mysql.com/doc/refman/5.1/en/partitioning.html 感兴趣(因为您已经有一个整数字段来确定状态)
  • 会尝试这些东西,感谢您的反馈

标签: php mysql triggers


【解决方案1】:

您应该在重新创建新触发器之前尝试删除触发器。

DELIMITER //
DROP TRIGGER archiveCar;
CREATE TRIGGER archiveCar AFTER UPDATE ON mms_cars
...
DELIMITER;

【讨论】:

    【解决方案2】:

    1235 - 此版本的 MySQL 尚不支持“多个触发器” 一张桌子的动作时间和事件相同'

    这意味着 mms_cars 已经有一个更新触发器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多