2011-03-29 40 views
1

我的系统要求是从Ubuntu的终端执行mysql的命令序列,
为了测试我有一个内容,如在桌面上创建一个文件query.sqlmysql的脚本文件(.SQL)运行问题

create table aa (id int); 
create tab bb (id int); 
create table cc (id int); 

我喜欢的命令执行此:

[email protected]:~/Desktop$ mysql --user=root --password=admin --database=zero <query.sql

我的问题是,如果任何查询失败,脚本停止执行。
任何人都可以告诉我如何防止它[这里只有第二个有错误的语法,第一个和第三个应该运行] 我想执行整个脚本,如果有任何失败避免它,并从下一个查询重新开始,并生成一个文件显示错误列表........

+0

确保首先运行具有语法错误的查询是一个好主意。 – 2011-03-29 07:46:50

+0

有些查询在没有语法错误的时候失败,[表有限制只插入5行,而当我们去6那么什么?这只是一个例子,我认为我们应该考虑如果一个失败,我们如何克服] – Arjun 2011-03-29 08:00:57

回答

1

,无论查询语法正确或不使用此命令

[email protected]:~/Desktop$ mysql --force --user=root --password=admin --database=zero <query.sql 

,如果有问题,此举将跳过查询执行下一个查询...
最后,如果有任何合成错误的查询,您将收到错误列表...... 错误将显示在终端上: - 错误1064(42000)在第2行:您的SQL语法有错误;
检查与您的MySQL服务器版本相对应的手册,以获得在第1行'tab bb(id int)'附近使用的正确语法 第3行的错误1050(42S01):表'cc'已存在
- ---------是否有任何方法可以将这个错误保存在文件相对于终端?----------

+0

是的完整查询是在下面使用它....零@零桌面:〜/桌面$ mysql --force --user = root --password = admin --database =零 error.log – Arjun 2011-03-29 11:44:51

0

我从来没有使用过它,但--force键应该忽略所有的错误

同样,没有测试过这好,但附加了MySQL与“2> error.log行”应该重定向mysql的所有错误输出到文件error.log

+0

非常感谢你2> error.log正常工作... – Arjun 2011-03-29 11:42:29

0

如果您只有CREATE TABLE您的文件中的语句,您可以添加一个IF NOT EXISTS为了避免表已经存在的问题。这样,您可以在收到错误后重新运行脚本,而不会有任何问题。

create table if not exists aa (id int); 
create tab if not exists bb (id int); 
create table if not exists cc (id int); 

参见:CREATE TABLE Syntax如果你想EXCUTE整个脚本文件

+0

我只是想知道这个概念,这就是为什么我犯了语法错误,我会尝试编写永不失败的查询,但如果它发生了什么?我只想执行那些可以执行的操作,并且如果有任何查询失败,则显示错误报告。 – Arjun 2011-03-29 07:56:46