identcurrent mysql_mysql - 获取任何选项卡的当前AUTO_INCREMENT值

即使methai的答案是正确的,如果您手动运行查询,当2个并发事务/连接实际上在生产中的运行时(例如)执行此查询时,会出现问题。

只需在MySQL工作台中手动尝试,同时打开2个连接:

CREATE TABLE translation (

id BIGINT PRIMARY KEY AUTO_INCREMENT

);

# Suppose we have already 20 entries, we execute 2 new inserts:

交易1:

21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';

insert into translation (id) values (21);

交易2:

21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';

insert into translation (id) values (21);

# commit transaction 1;

# commit transaction 2;

插入事务1是可以的:事务2的插入出错:错误代码:1062。对于'PRIMARY'键重复输入'21'。

一个好的解决方案是jvdub的答案,因为每个事务/连接2个插入将是:

交易1:

insert into translation (id) values (null);

21 = SELECT LAST_INSERT_ID();

交易2:

insert into translation (id) values (null);

22 = SELECT LAST_INSERT_ID();

# commit transaction 1;

# commit transaction 2;

但是我们必须在插入之后执行last_insert_id()!我们可以重用该id来插入其他需要外键的表中!

此外,我们无法执行以下2个查询:

insert into translation (id) values ((SELECT AUTO_INCREMENT FROM

information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()

AND TABLE_NAME='translation'));

因为我们实际上有兴趣在其他表中获取/重用该ID或返回!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值