![]() |
1
19
我想你永远不能确定 下一个 ID,因为有人可能会在您请求下一个ID后插入新行。您至少需要一个事务,如果我没有弄错,您只能使用实际的ID 之后 插入它,至少这是处理它的常用方法——请参见 http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html |
![]() |
2
85
2014-12-05更新: 由于西蒙(接受)的回答以及迭戈的评论中列出的原因,我不建议采用这种方法。请自行承担风险使用下面的查询。 我在MySQL开发人员网站上找到的最短的一个:
请注意,如果有几个数据库具有相同的表,则还应指定数据库名称,如下所示:
|
|
3
17
除了LukaszLysik的答案——左连接类型的SQL。
希望它能帮助一些参观者,尽管这篇文章相当陈旧。 |
![]() |
4
10
鉴于你在评论中所说的:
有一种方法可以做到你所要求的,那就是问桌子 下一插入行的ID 将 是 在实际插入之前:
结果集中会有一个名为“自动增量”的字段,它告诉您下一个自动增量值。 |
![]() |
5
10
据我所知,如果ID为:1、2、4、5,则返回3。
|
![]() |
6
4
你说:
你所要求的是非常危险的,会导致比赛条件。如果您的代码由不同的用户同时运行两次,那么他们都将得到6个,并且他们的更新或插入将逐步进行。
我建议你改为
|
![]() |
7
3
如果要选择第一个间隙,请使用:
有一个
但是,由于优化器在
|
![]() |
8
1
如果您真的想在插入行之前计算下一个插入的键(我认为这不是一个很好的主意),那么我建议您使用当前使用的最大ID加上一个:
但是我建议您让MySQL自己创建ID(通过使用自动增量列)并使用
返回集现在只包含一列,其中包含新生成行的ID。 |
![]() |
9
1
现在回答这个问题已经太迟了,但希望这能帮助别人。 @Eimantas已经给出了最佳答案,但是如果在同一服务器下有两个或多个同名表,那么解决方案将无法工作。 我稍微修改了@eimantas的答案以解决上述问题。
|
![]() |
10
0
一种方法是将索引设置为自动递增。然后您的SQL语句简单地指定了空值,然后SQL解析器为您完成其余的工作。
|
![]() |
11
0
如果将它与插入新记录结合使用,则可以使用类似的方法。 (您已经在注释中声明了ID是自动递增的,而另一个表需要下一个ID+1)
这是伪代码,但你知道 |
![]() |
12
-1
许多解决方案的问题是,它们只找到下一个“间隙”,而忽略“1”是否可用,或者如果没有任何行,它们将返回空值作为下一个“间隙”。 以下内容不仅可以找到下一个可用的间隙,如果第一个可用的数字是1,也可以考虑到:
|
![]() |
13
-1
这对我(MySQL5.5)很有效,也解决了“开始”位置的问题。
如前所述,这些类型的查询非常慢,至少在MySQL中是如此。 |
![]() |
14
-2
|
![]() |
15
-2
|
![]() |
hello_programmers · Mysql从其他表输出一列 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 1 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 1 年前 |
|
Kugelfisch · 用php为数据库加密数据 1 年前 |