2017-01-11 5 views
2

おはようございます。 私はMySQLデータベースにテーブルを持っています。 この表には、毎時10レコードのように書くことができる5台のロボットがあります。 私が作成したスクリプトは3ヶ月ごとにテーブルのコピーを作成し、すべてのテーブルエントリを削除します(このようにしてIDを特定の順序で保持できます)。複数のMySql問合せの処理(削除とコピー)

私の質問です。スクリプトが0点でテーブルをコピーするために起こっている、とSQL文が最低のIDから始まるため、レコードが、全く問題はありません、ロボットから追加される場合

CREATE TABLE omologationResult_{date} AS SELECT * FROM omologationResult 
DELETE FROM omologationResult 

:二つの異なる文である '最後まで。しかし、スクリプトがdeleteに行くと、テーブルとロボットがそれに書き込んでいます。何が起こるか?私は最後のロボットの記録を失う?

それが本当であれば。テーブルのコピーを作成し、コピーしたデータだけを削除するにはどうすればよいですか?

それはアトミックではないので

答えて

2

はい、これは安全な操作ではありません、ありがとうございました。別のスレッドがCREATE .. SELECTとDELETEの間にそのテーブルに値を挿入することは可能です。あなたが持っている1つのオプションは、DELETE

CREATE TABLE omologationResult_{date} AS SELECT * FROM omologationResult; 
DELETE omologationResult FROM omologationResult 
INNER JOIN omologationResult_{date} ON omologationResult_{date}.id = omologationResult.id 

マルチテーブルを使用することで、両方のテーブルに存在するアイテムのみがomologationResult

+0

から削除されていることを保証しますありがとうございました! – andrepogg

+1

助けてくれてうれしい – e4c5

関連する問題