背景:程序中可能存在同时运行同一条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
结果,只有一条会执行成功,其余不会产生影响。