我在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要么都工作要么两者都失败(交易)?
答案 0 :(得分:1)
您需要的是transaction:
BEGIN;
LOAD DATA INFILE ...;
SET ...;
COMMIT;
除非您COMMIT
事务,否则数据库不会加载这些行或更新列。
作为备注,some operations cannot be "transactionalized" in MySQL,这包括架构更改以及TRUNCATE TABLE
。有些陈述会强制提交,无论您的意图如何,因此在尝试创建交易时要小心避免这些。