MySQL触发器错误:更新同一行上的另一个单元

时间:2013-10-19 05:24:11

标签: mysql triggers

我有一个带有列

的mysql表'市场'
  1. open_time(datetime),
  2. session_num(int),
  3. 持续时间(int),
  4. end_time(datetime)。
  5. 如果有人更新[open_time,session_num,duration]中的任何一个,我想触发自动计算和更新close_time的值。

    我想要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.
    

    我该如何解决?感谢。

2 个答案:

答案 0 :(得分: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 ;

答案 1 :(得分:-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。