在MySQL中查找下一个可用的id

Bur*_*ede 52 mysql sql

我必须在MySQL数据库中找到下一个可用的id(如果数据库中有5个数据,我必须得到下一个可用的插入位置,即6).我怎样才能做到这一点?我已经使用过MAX(id),但是当我从数据库中删除一些行时,它仍然保留了未更新的旧最大值.

Eim*_*tas 85

更新2014-12-05:由于Simon的(接受)答案以及Diego的评论中提出的原因,我不推荐这种方法.请使用以下查询,风险自负.

我在mysql开发者网站上找到的最短的一个:

SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want'
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有少量具有相同表的数据库,则还应指定数据库名称,如下所示:

SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want' AND table_schema='the_database_you_want';
Run Code Online (Sandbox Code Playgroud)

  • 不错,但别忘了!数据库中的其他用户可能在您进行此查询之后和实际插入记录之前插入记录.它适用于某些情况,但记住它! (14认同)

Sim*_*olt 21

我认为你不能确定下一个 id,因为有人可能会在你要求下一个id之后插入一个新行.你至少需要一个事务,如果我没弄错,你只能插入它之后获得实际的id ,至少这是处理它的常用方法 - 请参阅http://dev.mysql.com/ DOC/refman/5.0/EN /获取器唯一id.html

  • @Oliver M Grech:"你的webapp中肯定没有用户" - 没有这样的事情,互联网没有工作时间.取决于"哦,它是GMT + 1的凌晨2点,因此没有用户"*会*回来咬你(去过那里,完成了). (7认同)

小智 17

除了Lukasz Lysik的答案 - LEFT-JOIN类SQL.
据我所知,如果有id:1,2,4,5它应该返回3.

SELECT u.Id + 1 AS FirstAvailableId
FROM users u
LEFT JOIN users u1 ON u1.Id = u.Id + 1
WHERE u1.Id IS NULL
ORDER BY u.Id
LIMIT 0, 1
Run Code Online (Sandbox Code Playgroud)

希望它能帮助一些游客,虽然帖子相当陈旧.


nic*_*ckf 12

鉴于你在评论中所说的话:

我的id coloumn是自动增量我必须得到id并将其转换为另一个base.So我需要在插入之前获得下一个id因为转换代码也将被插入.

有一种方法可以做到你的要求,这是问表中的什么未来插入的行的ID 你真正插入之前:

SHOW TABLE STATUS WHERE name = "myTable"
Run Code Online (Sandbox Code Playgroud)

该结果集中将有一个名为"Auto_increment"的字段,它告诉您下一个自动增量值.


Luk*_*sik 10

据我所知,如果有id:1,2,4,5它应该返回3.

SELECT t1.id + 1
FROM theTable t1
WHERE NOT EXISTS (
    SELECT * 
    FROM theTable t2
    WHERE t2.id = t1.id + 1
)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)