sql >> Databáze >  >> RDS >> Mysql

Atomic MySQL transakce v Anorm

Použijte withTransaction místo withConnection takhle:

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()
  }
}

A proč byste zde vůbec používali transakci? Toto by mělo fungovat také:

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. Vypočítejte procentuální nárůst/snížení z hodnoty předchozího řádku

  2. Chyba PHP (MySQL):Upozornění:mysql_num_rows() očekává, že parametr 1 bude zdrojem

  3. Přenosná verze MySql

  4. Jak získat data z databáze pro zobrazení stránky v laravel?