2010-04-23 33 views
1

下面是我需要創建的觸發器,但它沒有被創建。請任何好友都能解釋我這個觸發器有什麼問題?請幫幫我。這個觸發器在mysql中有什麼問題?

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

+1

更加關注。錯誤消息不是來自MySQL,而是來自PHP。您的PHP腳本存在問題。嘗試使用主機提供的任何數據庫管理員應用程序(例如phpMyAdmin)(而不是PHP)。 – outis 2010-04-23 06:27:50

+0

現在我已經創建了觸發器,並且當我要更新它時,會出現如下錯誤。 #1436 - 線程堆棧溢出:131072字節堆棧使用5908字節,需要128000字節。使用'mysqld -O thread_stack =#'指定一個更大的堆棧。 – Jimit 2010-04-23 07:28:32

+0

你想達到什麼目的? – Johnsyweb 2011-05-16 11:33:28

回答

2

而不WHERE子句將具有線性(O(N通過在屬性中的所有行經由UPDATE傳遞)[N是行數的因素])運行時間。如果所有行在ListPrice中發生更改,那麼該時間可以加倍。

示例:如果您運行「UPDATE properties SET ListPrice = 5;」並且表中有10,000行,請放心,會有10,000個UPDATE和10,000條INSERT插入到property_history表中。

請確保您的三(3)件事情:

  1. 沒有運行對產品表批量更新
  2. 沒有使用WHERE子句不不使用使用索引
  3. WHERE子句,其指標被MySQL Optimizer忽略