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

MySQLのフィールドをインクリメントすることはアトミックですか?

    書き込みはアトミックですが、増分には読み取りも必要です。したがって、問題は次のとおりです。読み取りが安全であるかどうか、言い換えると、インクリメントを実行している別のスレッドが同じ値でインクリメントされないことを確認しますか?疑問があります。これを行う100%正しい方法は次のようになります。

    -- begin transaction here
    
    select counter from myCounters where counter_id = 1 FOR UPDATE;
    
    -- now the row is locked and nobody can read or modify its values
    
    update myCounters set counter = ? where id = 1;
    
    -- set ? to counter + 1 programmatically
    
    commit; -- and unlock...
    


    1. MySQLでテーブルを作成する方法

    2. localhostとmysql_connect()の127.0.0.1

    3. 再生の紹介—SpotlightCloudの新しいポイントインタイム診断

    4. PHPとAJAXを使用した実行中にMySQLクエリを強制終了する