2013-10-19 37 views
2

我有一個MySQL表 '市場' 與列的MySQL觸發錯誤:更新在同一行

  1. OPEN_TIME(日期時間),
  2. session_num(INT)另一種細胞,
  3. 持續時間( int),
  4. end_time(datetime)。

我想要觸發器自動計算並更新close_time的值,如果有人更新[open_time,session_num,duration]中的任何一個。

我想end_time = open_time + session_num * duration;

我做了一個觸發條件如下:

CREATE TRIGGER `update` BEFORE UPDATE ON `market` 
FOR EACH ROW BEGIN 
    SET new.end_time = new.open_time + new.duration * new.session_num; 
END 

然而,當我更新OPEN_TIME,這種錯誤出現:

#1436 - Thread stack overrun: 13080 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack. 

我怎樣才能解決呢?謝謝。

回答

-1

不要看現在,但錯誤信息是告訴你如何解決這個問題。

Use 'mysqld --thread_stack=#' to specify a bigger stack. 

的問題是,你的線程堆棧設置爲絕對最低限度支持的價值,這是不夠大,並且需要更大。

在你的my.cnf文件中設置thread_stack = 256K,重啓服務器,就完成了。您目前的價值似乎是,低於 5.x系列任何版本中記錄的默認值,所以我會建議您在配置中實際上已經有thread_stack條目需要編輯,而不是添加新的一個。

http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_thread_stack

我沒有親自遇到過的情況下256K是不足夠的線程堆棧大小,或者192K只要你永遠,永遠,永遠都遞歸存儲過程。

0

間隔 - 分鐘是多少?

嘗試

 
delimiter | 
CREATE TRIGGER u_market_trigger BEFORE UPDATE ON `market` 
FOR EACH ROW BEGIN 
SET new.end_time=new.open_time + interval (new.duration*new.session_num) minute; 
END 
| 
delimiter ; 
+0

對不起..同樣的錯誤... – michael

+0

檢查你是否有其他觸發器干擾這一個。 –

+0

不..我刪除了其他觸發器... – michael