我必须编写一个查询,其中我需要为未使用/未生成/在数据库中不存在的特定记录分配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.