执行MySQL脚本文件遇到的问题
2014-07-29 09:31
525 查看
在调试linux安装包的时候,发现原来的sql文件不能直接被mysql load。问题的根本原因是 触发器 和 存储过程 load失败。 现在的安装流程里面,是管理工具在第一次加载的时候,通过java,逐行调用sql语句来完成的。这里的说的“逐行”实际是按照"-- -------------"这样的分隔符。 mysql命令在load sql的时候,默认的分割符是";",也就是按照 ";" load 语句来执行。但是对于 存储过程 和 触发器,是一个代码块,在整个代码块中间是有 ";"的,导致不能正常的load。 比较标准的做法是在 sql文件中 创建触发器和存储过程的时候,使用delimiter 申明来临时改变 分割符。在触发器和存储过程的结尾使用 这个改变过的分隔符,表示存储过程或者触发器的结尾。然后再使用delimiter 把分隔符改回去。如下:
改为CMD运行时,无误,但是在Java中运行时报如下 的错误:
delimiter // 《== 有了这个申明后,mysql在load sql语句的时候,就不是以;为一个语句的结尾,而是以//为一个语句的结尾。 CREATE TRIGGER insert_radpostauth BEFORE INSERT ON radpostauth FOR EACH ROW BEGIN declare v_username varchar(20) default ''; declare v_usergroupid int(11) default null; declare v_cardid varchar(18) default ""; declare v_cardtype varchar(20) character set utf8 default ""; declare v_groupname varchar(20) default ""; select name, usergroupid, cardid, cardtype into v_username, v_usergroupid, v_cardid, v_cardtype from dbradius.bill_user where bill_user.account = new.userName; select groupname into v_groupname from dbradius.bill_usergroup where bill_usergroup.usergroupid = v_usergroupid; insert dbradius.bill_detail (account, username, acctsessionid, auditip, authResult, cardid, cardType, usergroupid, groupname) values (new.userName, v_username, new.acctsessionid, new.auditip, new.authResult, v_cardid, v_cardtype, v_usergroupid, v_groupname); END;// delimiter ;针对linux安装包的修改,可能导致windows下的安装包在load sql的时候出现问题。在Windows下执行了如上修改后的TRIGGER后,使用JDBC会执行失败。查看TRIGGER语句如下:
SELECT * FROM information_schema.`TRIGGERS`;
改为CMD运行时,无误,但是在Java中运行时报如下 的错误:
java.io.IOException: Cannot run program "mysql": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) at java.lang.Runtime.exec(Runtime.java:593) at java.lang.Runtime.exec(Runtime.java:431) at java.lang.Runtime.exec(Runtime.java:328) at com.network.manager.nmsmanager.test.Test.runCmd(Test.java:29) at com.network.manager.nmsmanager.test.Test.main(Test.java:19)表示权限不够,可以将执行的文件放到D盘下试一试。
相关文章推荐
- 解决执行Oracle控制脚本时遇到的 “cat: /etc/oratab: 没有那个文件或目录”的问题
- mysql 执行脚本中遇到到权限问题
- Python脚本执行Mysql语句遇到死锁问题
- 遇到的问题-----------perl脚本用handlersocket把数据插入mysql执行时报错lock_tables
- 遇到的问题-----------perl脚本用handlersocket把数据插入mysql执行时报错lock_tables
- 解决执行Oracle控制脚本时遇到的 “cat: /etc/oratab: 没有那个文件或目录”的问题
- 运行awk脚本文件遇到不能执行问题
- [C#]不用IIS直接执行aspx文件中遇到的问题
- mysql从执行.sql文件时处理\n换行的问题
- MySql下如何执行sql脚本文件
- 解决Linux下shell脚本文件执行失败问题
- mysql执行sql脚本文件
- Mysql 执行sql脚本文件
- 如何执行一个mysql的sql脚本文件
- system方法执行脚本遇到的问题
- mysql执行存储过程中可能会遇到的问题
- java实现插入mysql二进制文件,blob类型,遇到问题及解决办法
- document.write 方式引入外部 JS 文件导致脚本程序执行顺序不同以及 DOM 树更新延迟问题
- mysql查看存储过程和执行sql脚本文件到数据库中
- 执行vbs脚本中遇到的问题及解决方案