2

シェルスクリプトには次の2つのステートメントがあります。

 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 に答える