连接池事务
创建连接池参考 sqlx 连接池;
事务SQL需要在同一个链接上执行
async fn transaction () -> bool {
// 获取连接池连接
let pool = POOL.read().await;
let conn = pool.get_pool();
// 开启事务
let mut transaction = conn.begin().await.unwrap();
let sql = r#"UPDATE `table` SET `field1` = "field1" WHERE `id` = 1"#;
// 这是使用的不是连接池 conn,而是 transaction
let res = sqlx::query(sql).execute(&mut transaction).await;
if let Err(error) = res {
// 失败回滚,可能还需要判断一下 `rows_affected` 或者 `last_insert_id`
transaction.rollback().await.unwrap();
return false;
}
// 省略其他 sql
todo!();
// 提交事务
transaction.commit().await.unwrap();
true
}