mysql - mysql中的这个触发器有什么问题?

标签 mysql sql triggers

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

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 ;

当我执行上面的触发器时,出现如下错误:

Fatal error: Maximum execution time of 300 seconds exceeded in /var/www/phpmyadmin/libraries/import/sql.php on line 99

最佳答案

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

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

请确认三 (3) 件事:

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

关于mysql - mysql中的这个触发器有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2696442/

相关文章:

java - 我无法使用 JSP 文件从 MySQL 数据库检索数据并收到 java.math.BigInteger cannot be cast to java.lang.Long 错误

java.lang.ClassNotFoundException : com. mysql.jdbc.Driver。

c# - WPF 交互触发器 CallMethodAction

mysql 自动化

MySQL 触发器 - 在表 1 中插入时更新表 2

mysql - 如何对 SQL 结果进行分组

mysql - 在 MyISAM 表中执行 START TRANSACTION 时会抛出任何错误吗?

c# - objConnect.Sql = Properties.Settings.Default.SQL 中的错误;

mysql - 我怎么能在 MySQL 中做到这一点

sql - 为什么 getGeneratedKeys() 在 INSERT 之后不返回任何结果?