关于一个头痛的问题,触发器?

屋檐下的猫儿 2013-05-31 11:50:38
这几天部署一个系统,用的tomcat6.0,数据库mysql5.0,起初在windows下面测试运行一点问题都没有。然后部署在Linux redhat5(数据库也是mysql5.0,tomcat6.0)下面出现了一个问题:在新增用户的时候会出现以下异常:失败SQLException: Can't update table 'user_info' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 查过了,大部分说是由于有insert的问题,要用set,下面是我触发器代码,及存储过程代码:这个是触发器的代码,直接复制的navicat的
begin 

CALL user_yongpin_synchro();

end

这个是存储过程的代码:
BEGIN

#Routine body goes here...

DELETE FROM user_yongpin WHERE user_yongpin.mtime < now()

OR NOT EXISTS(

SELECT 1 FROM job_ploy

WHERE job_ploy.yongpin_detail_ID = user_yongpin.yongpinID

AND job_ploy.job_type_ID =

(SELECT user_info.job_type_ID

FROM user_info

WHERE user_info.ID = user_yongpin.user_info_ID)

);



INSERT INTO user_yongpin

(yongpinID, remain, mtime, user_info_ID)

SELECT

job_ploy.yongpin_detail_ID, job_ploy.yongpin_num,

DATE_ADD(user_info.etime,INTERVAL (((YEAR(NOW()) - YEAR(user_info.etime)) * 12) + (MONTH(NOW()) - MONTH(user_info.etime))) + job_ploy.yongpin_limit - (((YEAR(NOW()) - YEAR(user_info.etime)) * 12) + (MONTH(NOW()) - MONTH(user_info.etime))) % job_ploy.yongpin_limit MONTH),

user_info.ID

FROM job_ploy

JOIN user_info ON job_ploy.job_type_ID = user_info.job_type_ID

WHERE NOT EXISTS (

SELECT user_yongpin.ID FROM user_yongpin

WHERE user_yongpin.user_info_ID = user_info.ID

AND user_yongpin.yongpinID = job_ploy.yongpin_detail_ID

AND user_yongpin.mtime > now()

/*AND user_info.job_type_ID = job_ploy.job_type_ID*/

);

END

插入操作触发调用上面那个存储。
头痛原因: 我在windows下连接本地数据没问题,我在linux下连接远程数据的数据库也没问题,在linux下连接本地的mysql 执行这个插入操作就出问题,报以上异常,数据库完全是从远程导入过来的,表结构什么的都比对过了,一样。
求解,求解,求解,纳闷,纳闷!
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
屋檐下的猫儿 2013-06-05
  • 打赏
  • 举报
回复
算了结贴吧,重装系统和数据库后问题解决!
屋檐下的猫儿 2013-06-02
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
[quote=引用 4 楼 stone_miao 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] user_info这个表是不是在其他地方有更新操作(inset 或 update)?
问题是我只要换个数据连接就可以用以了,就连那台部署的linux系统上数据库就不行了[/quote] 会不会那台linux上的数据库数据量比较大?或者数据库系统比较烂?[/quote] 这不是解决问题的根本啊 ,想弄清楚源头 - -
oh_Maxy 版主 2013-05-31
  • 打赏
  • 举报
回复
引用 4 楼 stone_miao 的回复:
[quote=引用 3 楼 oh_Maxy 的回复:] user_info这个表是不是在其他地方有更新操作(inset 或 update)?
问题是我只要换个数据连接就可以用以了,就连那台部署的linux系统上数据库就不行了[/quote] 会不会那台linux上的数据库数据量比较大?或者数据库系统比较烂?
屋檐下的猫儿 2013-05-31
  • 打赏
  • 举报
回复
引用 2 楼 feier00 的回复:
那你用set试试呗
问题是我只要换个数据连接就可以用以了,就连那台部署的linux系统上数据库就不行了,如果真是由于insert而引起的,在windows下的那个应该也是不行的啊
屋檐下的猫儿 2013-05-31
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
user_info这个表是不是在其他地方有更新操作(inset 或 update)?
问题是我只要换个数据连接就可以用以了,就连那台部署的linux系统上数据库就不行了
oh_Maxy 版主 2013-05-31
  • 打赏
  • 举报
回复
user_info这个表是不是在其他地方有更新操作(inset 或 update)?
跳蚤图 2013-05-31
  • 打赏
  • 举报
回复
那你用set试试呗
屋檐下的猫儿 2013-05-31
  • 打赏
  • 举报
回复
怎么这么难 - - 一个人都木有?

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧