【问题标题】:What is wrong with this trigger in mysql?mysql中的这个触发器有什么问题?
【发布时间】:2011-02-11 09:24:22
【问题描述】:

下面是我需要创建的触发器,但它没有被创建。请任何朋友可以解释一下这个触发器有什么问题?请帮帮我。

DELIMITER $$
 CREATE TRIGGER property_history_update 
 AFTER UPDATE ON `properties`
 FOR EACH ROW BEGIN

 IF OLD.ListPrice != NEW.ListPrice THEN  
    INSERT INTO `property_history` 
      SET ListingKey = OLD.ListingKey,
           ListPrice = NEW.ListPrice,
       ListingStatus = OLD.ListingStatus,
     LastUpdatedTime = NEW.LocalLastModifiedOn;
 END IF;

END$$
DELIMITER ;

当我执行上面的触发器时,我得到了如下错误:

致命错误:/var/www/phpmyadmin/libraries/import/sql.php 第 99 行的最大执行时间超过 300 秒

【问题讨论】:

  • 密切关注。错误消息不是来自 MySQL,而是来自 PHP。您的 PHP 脚本有问题。而不是 PHP,请尝试您的主机提供的任何数据库管理应用程序(例如 phpMyAdmin)(如果有)。
  • 现在我已经创建了触发器,当我要更新它会给出如下错误。 #1436 - 线程堆栈溢出:131072 字节堆栈使用了 5908 字节,需要 128000 字节。使用 'mysqld -O thread_stack=#' 指定更大的堆栈。
  • 你想达到什么目的?
  • 感谢您的信任投票!!!

标签: mysql sql triggers


【解决方案1】:

通过没有 WHERE 子句的 UPDATE 传递属性中的所有行将具有线性 (O(n) [n 是行数的因子]) 运行时间。如果所有行的 ListPrice 都发生变化,则该时间可能会加倍。

示例:如果您运行“UPDATE properties SET ListPrice = 5;”并且表中有 10,000 行,请放心,property_history 表中将有 10,000 个 UPDATE 和多达 10,000 个 INSERT。

请确认三(3)件事:

  1. 不对产品表运行批量更新
  2. 不使用不使用索引的 WHERE 子句
  3. 不使用索引被 MySQL 优化器忽略的 WHERE 子句

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 2012-04-26
    • 2017-12-24
    • 2022-01-21
    • 2011-08-16
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多