使用mysql的全有或全无/事务语句

时间:2013-02-03 22:01:53

标签: mysql bash shell

我在shell脚本中有以下两个语句:

 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行开始。 32要么都工作要么两者都失败(交易)?

1 个答案:

答案 0 :(得分:1)

您需要的是transaction

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

除非您COMMIT事务,否则数据库不会加载这些行或更新列。

作为备注,some operations cannot be "transactionalized" in MySQL,这包括架构更改以及TRUNCATE TABLE。有些陈述会强制提交,无论您的意图如何,因此在尝试创建交易时要小心避免这些。