2013-02-03 25 views
1

全有或全無/ TRANSACTION語句我在一個shell腳本如下兩條語句:與MySQL

32 /usr/local/mysql/bin/mysql -u root files -e "TRUNCATE path" 
33 /usr/local/mysql/bin/mysql -u root files -e " 
34  LOAD DATA INFILE '/tmp/files.txt' 
35  INTO TABLE path 
36  FIELDS TERMINATED BY ',' 
37  (size, @d2, @d3, @d4, @d5, path) 
38  SET last_modified=str_to_date(CONCAT(@d2, ',', @d3, ',', @d4, ',', @d5), '%b,%d,%T,%Y');" 
39 } 

我將如何讓這樣的命令就行開始32 & 32兩個都工作或同時失敗(交易)?

+0

閱讀本文(http://dev.mysql.com/doc/refman/5.0/en/commit.html) – user000001

回答

1

你需要的是一個transaction

BEGIN; 
LOAD DATA INFILE ...; 
SET ...; 
COMMIT; 

除非你COMMIT交易,數據庫將不會加載這些行或更新的列。

作爲說明,some operations cannot be "transactionalized" in MySQL,這包括架構更改以及TRUNCATE TABLE。無論您的意圖如何,有些語句會強制進行提交,因此在嘗試創建事務時要小心避免這些提交。

+0

謝謝。我會在哪裏開始交易'BEGIN',在上面的兩個命令中? – David542

+0

我認爲我的例子在這方面非常明確。在「LOAD」操作之前。 – tadman

+0

而且,對於單個語句('LOAD INFILE'),它本身不是事務性的嗎? – David542