2012-03-16 1 views
3

このようなSQLがあります1つのSQL文は常にinnodbでアトミックですか?

UPDATE xxx SET num = num -1 WHERE num> 0;

トランザクション文がなくても、これはアトミックな操作ですか?

このSQLでは、numフィールドが常に非負であることを確認できますか?

答えて

4

自動コミットを有効にすると、それはアトミックに実行されます。自動コミットを無効にしない限り、すべての文は単一のトランザクションになります。

デフォルトで自動コミットが有効になっているため、通常はトランザクションを開始するためにSTART TRANSACTIONが必要です。

+0

このSQLでは、numフィールドが常に非負であることを確認できますか? – jilen

+0

はい、そうです。このクエリから否定的な結果が得られた場合は、自動コミットが有効になっていることを確認する必要があります。 'select @@ autocommit;は1を返します。 –

+0

はたくさん考えます。自動コミットは実際に有効になっています。私はシステムが同時にvisted中に負の数が表示されないようにするために、このSQLを使用します – jilen

関連する問題