下面是我需要创建的触发器,但它没有被创建。请任何 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) 件事:
- 不对产品表运行批量更新
- 不使用不使用索引的 WHERE 子句
- 不使用索引被 MySQL 优化器忽略的 WHERE 子句
关于mysql - mysql中的这个触发器有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2696442/