2

我有一个带有列的 mysql 表“市场”

  1. open_time(日期时间),
  2. session_num (int),
  3. 持续时间(整数),
  4. end_time(日期时间)。

如果有人更新 [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.

我该如何解决?谢谢。

4

2 回答 2

0

什么是间隔 - 分钟?

尝试

分隔符 |
在“市场”更新之前创建触发器 u_market_trigger
每一行开始
SET new.end_time=new.open_time + 间隔(new.duration*new.session_num)分钟;
结尾
|
分隔符;
于 2013-10-19T05:36:27.013 回答
-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。

于 2013-10-19T14:57:47.757 回答