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

AnormでのアトミックMySQLトランザクション

    withTransactionを使用する withConnectionの代わりに このように:

    private def incrementHitCounter(urlName:String) {
      DB.withTransaction { implicit connection =>
        SQL("select @hits:=hits from content_url_name where url_name={urlName};").on("urlName" -> urlName).apply()
        SQL("update content_url_name set hits = @hits + 1 where url_name={urlName};").on("urlName" -> urlName).executeUpdate()
      }
    }
    

    そして、なぜここでトランザクションを使用するのでしょうか?これも機能するはずです:

    private def incrementHitCounter(urlName:String) {
      DB.withConnection { implicit connection =>
        SQL("update content_url_name set hits = (select hits from content_url_name where url_name={urlName}) + 1 where url_name={urlName};").on("urlName" -> urlName).executeUpdate()
      }
    }
    



    1. DISTINCTでCOUNT(*)を選択する

    2. MySQLダイナミックピボット

    3. データベース値のペアリングについてサポートが必要

    4. 選択した結果を挿入スクリプトに変換する-SQLServer