gpt4 book ai didi

mysql - SQL变量未在go客户端的选择查询中更新

转载 作者:IT王子 更新时间:2023-10-29 02:35:07 24 4
gpt4 key购买 nike

我正在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com