我正在 SQL 中运行以下查询。
SET @thisid=0;
SET @serial=0;
SELECT @serial := IF((@thisid != `places`.`id`), @serial + 1, @serial) as `serial`, @thisid := `places`.`id`, `places`.`id` FROM `places`;
变量@serial 基本上只有在新的id 与上一个不同时才会递增。 在终端中运行这些查询并打印@serial 和@thisid 的值后,收到的值为@thisid='id6' @serial=6。
我在 go 代码中执行了这个查询:
if _, err = repo.db.ExecContext(ctx, "SET @thisid=0;"); err != nil {
return
}
if _, err = repo.db.ExecContext(ctx, "SET @serial=0;"); err != nil {
return
}
rows, err = repo.db.QueryContext(ctx, fmt.Sprintf(
"SELECT @serial := IF((@thisid != `places`.`id`), @serial + 1, @serial) as `serial`, @thisid := `places`.`id`, `places`.`id` FROM `places`;",
))
if err != nil {
fmt.Println("error here")
return
}
if err = repo.db.QueryRow("SELECT @serial").Scan(&that); err != nil {
return
}
if err = repo.db.QueryRow("SELECT @thisid").Scan(&this); err != nil {
return
}
在打印@thisid 和@serial 的值时,@thisid 的值接收到与@serial 的值接收到的值相同的0。它似乎没有动态更新。
最佳答案
Go 使用连接池,这意味着每个查询可能发生在不同的连接上。像这样的变量仅限于连接。如果您需要它们在查询之间持续存在,则需要使用事务来确保您保持在同一个连接中。
关于mysql - SQL变量未在go客户端的选择查询中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56785822/