mysql获取id一直是0_LAST_INSERT_ID()始终返回0(RMySQL) – 单独的连接问题

在一些

post中找到的原始示例

根据这个post,下面的SQL语句应该给我一个向量

1,2,2,2,2到底:

require("RMySQL")

con

dbDriver("MySQL"),

db="your_db",

user="your_user",

password="your_pw",

host="localhost"

)

> con

> dbSendQuery(con, "DROP TABLE IF EXISTS t;")

> dbSendQuery(con, "CREATE TABLE t (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY);")

> dbSendQuery(con, "INSERT INTO t VALUES(NULL);")

> dbGetQuery(con, "SELECT LAST_INSERT_ID() FROM t;")

LAST_INSERT_ID()

1 0

> dbSendQuery(con, "INSERT INTO t VALUES(NULL),(NULL),(NULL);")

> dbGetQuery(con, "SELECT LAST_INSERT_ID() FROM t;")

LAST_INSERT_ID()

1 0

2 0

3 0

4 0

修改了示例,使其比原始用例更像真实用例:

dbSendQuery(con, "DROP TABLE IF EXISTS t;")

dbSendQuery(con, paste("CREATE TABLE t",

"(i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, x INT);"))

> dbGetQuery(con, "SELECT CONNECTION_ID();")

CONNECTION_ID()

1 673490

dbSendQuery(con, "INSERT INTO t SET x=1;")

> dbGetQuery(con, "SELECT CONNECTION_ID();")

CONNECTION_ID()

1 673491

> dbGetQuery(con, "SELECT LAST_INSERT_ID();")

LAST_INSERT_ID()

1 0

> dbGetQuery(con, "SELECT CONNECTION_ID();")

CONNECTION_ID()

1 673493

> dbGetQuery(con, "SELECT LAST_INSERT_ID();")

LAST_INSERT_ID()

1 0

dbSendQuery(con, "INSERT INTO t SET x=2;")

> dbGetQuery(con, "SELECT LAST_INSERT_ID();")

LAST_INSERT_ID()

1 0

> dbGetQuery(con, "SELECT * FROM t;")

i x

1 1 1

2 2 2

嗯,它没有,真的;-)

我已经google了一点,AFAIU,LAST_INSERT_ID()是“连接感知”,因为如果要正常工作必须使用相同的连接.但是,我认为通过将连接对象分配给con我确保在上面的每个语句中确实使用了相同的连接.

好吧,显然不是;-)任何人都可以通过一些解释和/或解决方法帮助我吗?

使用类似于< TABLE>中的select max(< ID>)之类的内容但是,不会削减它,因为我正在运行同时写入数据库的多个线程,因此如果这样做就搞乱了ID检索.

谢谢!

截至2012-04-20的调查结果

>感谢Quassnoi,我能够更多地追踪问题.看起来像RMySQL函数并不真正关心显式conn参数,但每次连接到DB时都会在后台打开新连接.这也可能是一些很好的理由.然而,有谁知道如何避免这种情况?

>刚刚联系了Jeffrey Horner(RMySQL包的维护者).似乎这是一个Windows问题.在Linux上为他工作: – /

连接细节

正如Jeff所建议的那样

> dbGetInfo(con)

$host

[1] "localhost"

$user

[1] "your_user"

$dbname

[1] "your_db"

$conType

[1] "localhost via TCP/IP"

$serverVersion

[1] "5.5.20"

$protocolVersion

[1] 10

$threadId

[1] 673489

$rsId

$rsId[[1]]

> dbGetInfo(dbDriver("MySQL"))

$drvName

[1] "MySQL"

$connectionIds

$connectionIds[[1]]

$connectionIds[[2]]

$connectionIds[[3]]

$fetch_default_rec

[1] 500

$managerId

$length

[1] 16

$num_con

[1] 3

$counter

[1] 179

$clientVersion

[1] "5.5.20"

> dbListConnections(dbDriver("MySQL"))

[[1]]

[[2]]

[[3]]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值