我必须在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)
Sim*_*olt 21
我认为你不能确定下一个 id,因为有人可能会在你要求下一个id之后插入一个新行.你至少需要一个事务,如果我没弄错,你只能在插入它之后获得实际的id ,至少这是处理它的常用方法 - 请参阅http://dev.mysql.com/ DOC/refman/5.0/EN /获取器唯一id.html
小智 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)
| 归档时间: |
|
| 查看次数: |
94451 次 |
| 最近记录: |