2

我在 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 行开始的命令要么都工作要么都失败(事务)?

4

1 回答 1

1

你需要的是一笔交易

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

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

请注意,某些操作不能在 MySQL 中“事务化”,这包括模式更改以及TRUNCATE TABLE. 无论您的意图如何,某些语句都会强制提交,因此在尝试创建事务时要小心避免这些语句。

于 2013-02-03T22:04:57.857 回答