sql – 如何在表中获得第一个未使用的ID?
|
我必须编写一个查询,其中我需要为未使用/未生成/在数据库中不存在的特定记录分配ID(唯一键). 简而言之,我需要为特定记录生成一个id并在打印屏幕上显示它. E. g.: ID Name 1 abc 2 def 5 ghi 所以,问题是它应该返回ID = 3作为尚未生成的下一个立即数,并且在生成这个id之后,我将把这些数据存储回数据库表. 它不是一个硬件:我正在做一个项目,我有一个要求,我需要编写这个查询,所以我需要一些帮助来实现这一目标. 所以请指导我如何进行此查询,或如何实现此目的. 谢谢. 我无法添加评论,所以这就是我在这里写评论的原因.. 我的步骤是这样的: – 1)从数据库表中检索未使用的id. 2)因为他们不是.用户(基于网站的项目),所以我不想发生并发,所以如果一个用户生成一个ID,那么它应该锁定数据库,直到同一个用户收到id并存储该id的记录.之后,其他用户可以检索不存在的ID.(主要要求).. 我怎么能在MySQL中实现所有这些东西,而且我认为Quassnoi的答案是值得的,但它不适用于MySQL ..所以plz解释有关查询的一点,因为它对我来说是新的..并且这个查询工作在MySQL .. 解决方法我把你的桌子命名为未使用SELECT id
FROM (
SELECT 1 AS id
) q1
WHERE NOT EXISTS
(
SELECT 1
FROM unused
WHERE id = 1
)
UNION ALL
SELECT *
FROM (
SELECT id + 1
FROM unused t
WHERE NOT EXISTS
(
SELECT 1
FROM unused ti
WHERE ti.id = t.id + 1
)
ORDER BY
id
LIMIT 1
) q2
ORDER BY
id
LIMIT 1
此查询由两部分组成. 第一部分: SELECT *
FROM (
SELECT 1 AS id
) q
WHERE NOT EXISTS
(
SELECT 1
FROM unused
WHERE id = 1
)
选择1是表中没有带有此ID的条目. 第二部分: SELECT *
FROM (
SELECT id + 1
FROM unused t
WHERE NOT EXISTS
(
SELECT 1
FROM unused ti
WHERE ti.id = t.id + 1
)
ORDER BY
id
LIMIT 1
) q2
选择表中没有下一个id的第一个id. 生成的查询选择这两个值中的最小值. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何从SQLServer2005表中删除字段
- sql – 在Access查询中如何计数字段中的唯一项目?
- 数据库设计 – 为什么维度建模中的事实表需要(不)主键?
- navicat不能创建函数解决方法分享
- SQL Server精妙的SQL语句
- SQL Server SQL语句练习实例之四 找出促销活动中销售额最高
- 数据库 – “ORA-28001:密码已过期”不可修复
- sql-server – 如何按列值返回前100行,然后将theese前100行
- ms-access – 如何将SubSonic与MS Access数据库一起使用
- sql-server – 每个实例的SQL Server Express内存和CPU限制
