我有一个带有列
的mysql表'市场'如果有人更新[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.
我该如何解决?感谢。
答案 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。