【问题标题】:MySQL trigger error: update another cell on the same rowMySQL 触发错误:更新同一行上的另一个单元格
【发布时间】:2013-10-19 05:24:11
【问题描述】:

我有一个带有列的 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.

我该如何解决?谢谢。

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    什么是间隔 - 分钟?

    试试

    分隔符 | 在“市场”更新之前创建触发器 u_market_trigger 每一行开始 SET new.end_time=new.open_time + 间隔 (new.duration*new.session_num) 分钟; 结尾 | 分隔符;

    【讨论】:

    【解决方案2】:

    现在不看,但错误消息告诉您如何解决问题。

    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。

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 2018-12-06
      • 2011-03-23
      相关资源
      最近更新 更多