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

複数の列を変更するMySQLの更新は非アトミックですか?

    PostgreSQL、Oracle、およびSQL Serverはすべて、これを不可分操作として扱います。 次のSQLフィドルを参照し、サーバーを切り替えて次のSQLの動作を確認してください> :

    CREATE TABLE Swap (
      a CHAR(1),
      b CHAR(1)
    );
    
    INSERT INTO Swap (a, b) VALUES ('a', 'b');
    
    UPDATE Swap SET a = b, b = a;
    
    SELECT * FROM Swap;
    

    MySQLは、更新後に同じ値を含む両方の列でこれを実装する唯一のRBDMSでした。

    これをどのように解決するかについては、代わりにデータベースから値を取得し、(updateステートメントではなく)アプリケーション内で計算を行ってから、計算された値でデータベースを更新します。このようにして、計算が一貫した方法で実行されることを保証できます。



    1. 選択した結果をOracleで転置する

    2. 外部サーバーに参加/プッシュダウンする前にサブクエリの評価を強制する方法

    3. MYSQL 5.7でのネイティブJSONサポート:MYSQLでのJSONデータ型の長所と短所は何ですか?

    4. 旅行ウェブサイトデータベースを設計する方法