导入的sql突然有一天报错如下:
trigger中调用存储过程,存储过程的代码有问题 .
解决方法:
查看自己的存储过程有类似于如下的select语句,
SELECT id INTO I*T FROM `s4_**_***`
WHERE `a***Id` = _a***d AND `c****Id` = _c****Id;
修改为
SELECT id INTO I*T FROM `s4_**_***`
WHERE `a***Id` = _a***d AND `c****Id` = _c****Id limit 1;
查询trigger和存储过程通过以下语句:
>use db;
>show triggers \G
如果该trigger里面调用procedure(例如有call procedurename的sql),则通过
>show create procedure procedurename \G 来查看该procedurename的内容
迁移mysql时遇到存储过程和触发器的相关问题:
mysqldump --single-transaction -uroot -proot db > db.sql
导入到一台新机器上后,
show triggers \G 发现trigger是存在的!
就粗心了,没有核查procedure,结果procedure丢失了!
导入sql时有类似如下的错误:
ERROR 1305 (42000) at line 211: PROCEDURE db4.s4_****_rencent_game does not exist
ERROR 1305 (42000) at line 212: PROCEDURE db4.s4_****_rencent_game does not exist |
mysqldump时默认导出trigger ,不导出procedure,故
>show triggers \G
尽管能看到有procedure 但实际上该procedure并没有导出
>show create procedure procedurename
会提示没有该procedure
解决方法:mysqldump时添加-R 参数
参数解释如下:
-R, --routines Dump stored routines (functions and procedures).
留为笔记!
阅读(3166) | 评论(0) | 转发(0) |