sql >> データベース >  >> RDS >> Mysql

MySQLでの結合挿入/更新は不可分操作ですか?

    「これらのクエリのそれぞれは、それ自体が不可分操作ですか?」のようなあなたの質問を理解しています。その場合、答えは「はい」です。他の2つの答えは、すべてのステートメントが一緒になってアトミックではないと言った場合に正しいです。

    データベースの原子性は意味するだけです 全部かゼロか。 意味するものではありません データの正確さ。あなたの声明は成功するかどうか。結合やサブクエリとは何の関係もありません。データベースがメモリ内またはディスク上の一時テーブルを使用する必要があるかどうかに関係なく、1つのステートメントは1つのステートメントです。

    トランザクションは、複数のステートメントを1つのステートメントとして扱うようにデータベースに指示するだけです。ステートメントの1つが失敗すると、すべてがロールバックされます。

    ここで重要な関連トピックは、分離レベル です。 。それらについて読みたいと思うかもしれません。

    編集(コメントに回答するため):

    それは正しい。それが有効なステートメントであり、電源障害が発生しないか、クエリが失敗する可能性があるその他の理由がない限り、それは実行されています。原子性自体は、ステートメントが実行されているかどうかを保証するだけです。完全性を保証し、データが破損していないことを保証します(書き込み操作が終了しなかったなどの理由で)。 データの正確性を保証するものではありません。 INSERT INTO foo SELECT MAX(id) + 1 FROM bar;のようなクエリがあるとします。 正しい分離レベルを設定して確認する必要があります 、ファントムリードなどを取得しないこと。



    1. グリッドインフラストラクチャを再リンクする

    2. 無制限のサブカテゴリを作成するための最良の方法は何ですか

    3. チャットメッセージをデータベースに保存する最良の方法は?

    4. Mysql列を行に変換(ピボットテーブル)