2011-03-29 30 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