加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何在表中获得第一个未使用的ID?

发布时间:2020-12-12 08:41:44 所属栏目:MsSql教程 来源:网络整理
导读:我必须编写一个查询,其中我需要为未使用/未生成/在数据库中不存在的特定记录分配ID(唯一键). 简而言之,我需要为特定记录生成一个id并在打印屏幕上显示它. E. g.: ID Name1 abc2 def5 ghi 所以,问题是它应该返回ID = 3作为尚未生成的下一个立即数,并且在生成
我必须编写一个查询,其中我需要为未使用/未生成/在数据库中不存在的特定记录分配ID(唯一键).

简而言之,我需要为特定记录生成一个id并在打印屏幕上显示它.

E. g.:

ID  Name

1   abc
2   def
5   ghi

所以,问题是它应该返回ID = 3作为尚未生成的下一个立即数,并且在生成这个id之后,我将把这些数据存储回数据库表.

它不是一个硬件:我正在做一个项目,我有一个要求,我需要编写这个查询,所以我需要一些帮助来实现这一目标.

所以请指导我如何进行此查询,或如何实现此目的.

谢谢.

我无法添加评论,所以这就是我在这里写评论的原因..
我使用MySQL作为数据库..

我的步骤是这样的: –

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.

生成的查询选择这两个值中的最小值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读