【问题标题】:Error: #1436 - Thread stack overrun with MySQL trigger错误:#1436 - MySQL 触发器导致线程堆栈溢出
【发布时间】:2012-10-06 17:28:04
【问题描述】:

给定错误:#1436 - 线程堆栈溢出:131072 字节堆栈使用了 6024 字节,需要 128000 字节。使用 'mysqld -O thread_stack=#' 指定更大的堆栈。

DROP TRIGGER IF EXISTS `After_delete_area_package`;
DELIMITER //
CREATE TRIGGER `After_delete_area_package` AFTER DELETE ON `area_package`
FOR EACH ROW BEGIN    
DELETE FROM accounts_areas
WHERE (area_id = 1); 
END
//
DELIMITER ;

我猜很简单。 表 accounts_areas 中唯一的 area_id 是 1
在此之前我尝试过 old.package_area_id

我没有外键限制,我的开销在设置为 28B 的 phpMyAdmin 中变为红色。

RDMS:myISAM

SQLFIDDLE:http://sqlfiddle.com/#!2/79a41

问题:为什么我的触发器不会从 account_areas where area_id = 1 中删除所有行

【问题讨论】:

  • 示例数据或表模式,或者我个人觉得使用一些真实数据的 sqlfiddle 可以让 SO 用户在几秒钟内解决问题..

标签: mysql sql triggers


【解决方案1】:

你可能错过了END吗?

DROP TRIGGER IF EXISTS After_delete_area_package;

DELIMITER $$
CREATE TRIGGER After_delete_area_package AFTER DELETE ON area_package
FOR EACH ROW
BEGIN
DELETE FROM accounts_areas
    WHERE area_id = 1;
END$$
DELIMITER;

编辑 1

由于您正在恢复 thread_stack 错误,因此解决方案是增加堆栈大小。

【讨论】:

  • 忘记复制了。编辑到上面,仍然无法正常工作。我正在从后端删除该行
  • 您收到任何错误吗? SELECT * FROM accounts_areas WHERE area_id = 1 的结果是什么?尝试包括添加数据库 (...TRIGGER db.After_delete...)
  • 删除 phpMyAdmin #1436 中的行时出现的错误 - 线程堆栈溢出:131072 字节堆栈使用了 6024 字节,需要 128000 字节。使用 'mysqld -O thread_stack=#' 指定更大的堆栈。
  • @NielsAulman 请参阅this、this 和this,了解可能的错误解决方案。
  • 我已经手动将 my.cnf 编辑为 256kb 但是。查询现在有效,但缺点是我在 phpMyAdmin 中丢失了插入。有点奇怪
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2011-02-08
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
相关资源
最近更新 更多