同时多次执行一条mysql的update语句

探讨了在高并发场景下,多个协程同时尝试更新同一数据库记录的问题。通过Go语言示例,演示了如何只有一个请求能成功更新,其余请求因条件变化而失败的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:程序中可能存在同时运行同一条sql语句的可能性,比如多台机器同时运行一个服务,再异步回调中,可能会多台机器同时update数据库中内容,测试是否会产生影响?

程序如下:

func testMysql() {
fmt.Println("requestid:", this.RequestId)
    videoTableName1 := "table name"
    var sqlUpdate_str string = fmt.Sprintf("update %s set `status` = 1, `process_time` = ? where `requestId` = ? and status = 0;", videoTableName1)
    var err_update error
    var row_count int64
    var err_affected error
    tx, pErr := this.VideoDb.Prepare(sqlUpdate_str)
    if pErr != nil {
fmt.Println("PrepareErr:", pErr)
    }

    if update_row, err_update_exec := tx.Exec(string(time.Now().Format("2006-01-02 15:04:05")), this.RequestId); err_update_exec != nil {
        err_update = err_update_exec
        fmt.Println("err_update_exec:", err_update)
    } else if row_count, err_affected = update_row.RowsAffected(); err_affected != nil {
        err_update = err_affected
       fmt.Println("err_affected:", err_update)
    } else if row_count == 0 {
         fmt.Println("row_count is 0")
    } else if row_count > 0 {
        fmt.Println("row_count:", row_count)
    }

}
 

主函数中同时起110个协程调用该函数:

    for ii:=0;ii<110;ii++ {
        go this.testMysql()
    }
执行结果为:

requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
requestid: 1577682332665
row_count: 1
 

结果,只有一条会执行成功,其余不会产生影响。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值