`

sql语句 求最小可用Id

阅读更多
sql语句 求最小可用Id

select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1) order by id

使用说明:
1.先看where not exists,每条记录,都会进行 where id=a.id+1判断

2.where id=a.id+1 这个的判断结果,就是5,6,7,9,如果没有8,就会返回8

3.外面的A表 现在是1,里面就判断,有没有2,
外面的A表 现在是2,里面就判断,有没有3,
....
外面的A表 现在是7,里面没有8,返回8了

4.select 1就是返回一个1,表示存在

5. 使用案例:
1,2,3,4,5,6,7,8,9
有一天,老板把8这条记录删掉了,下次添加的时候,不想添加10,而想用回8这个记录

6.此sql语句的缺点:
如果序列中,1,2,3,4,5,6.... 老板把1删掉了,它是算不出1来的
原因:因为它用ID+1,1被删了的话,第一条就是2了,ID+1就去判断有没有3了

7.同理,如果序列中1,2,3,4,5,6,7,8,9,老板把前面的6个都删掉了,也求不出来

8.解决办法:解决的办法就是:另写一段代码,先判断有没有1这条记录,就OK了

建表以及添加数据、语句测试、删除前几项Id语句测试的sql脚本【sql server2000】

--创建test表
create table test
(
id int identity primary key nonclustered,
content varchar(50) not null default ''

)
go
--表创建结束
--添加数据
declare @i int
set @i=1
while @i<10
begin
set nocount on
insert into test(content) values(@i)
set @i=@i+1
end
--添加结束
--查询所有数据
select * from test
--删除第八条(随便删除一条)
delete from test where id=8
--测试求最小可用Id
select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1) order by id
--删除前两条数据
delete from test where id<=2
--重新测试
select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1)
--解决无法测试第一条是否已删除的办法
select top 1 id from test
--可以测试出第3条开始的 所以前2条是空的

转载自:http://hi.baidu.com/ykphp/blog/item/d84a6eb464ae67778bd4b21d.html
分享到:
评论

相关推荐

    Sql语句求最小可用id

    "Sql语句求最小可用id" 在数据库管理系统中,寻找最小可用ID是非常常见的问题。这个问题可以通过使用SQL语句来解决。下面我们将介绍如何使用SQL语句来求最小可用ID。 首先,让我们了解一下什么是最小可用ID。最小...

    根据以下语句查询执行消耗CPU大的sql语句.docx

    根据语句查询执行消耗CPU大的SQL语句 在 SQL Server 中,查询执行消耗 CPU 大的语句对于系统性能的优化至关重要。在这个文档中,我们将学习如何使用三个语句来查询执行消耗 CPU 大的 SQL 语句。 语句一:根据...

    经典SQL语句大全

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    SQL注入语句

    标题与描述概述的知识点主要围绕SQL注入技术,这是一种常见的安全攻击方式,攻击者通过将恶意SQL代码注入到应用程序中,从而获取对数据库的未授权...防止SQL注入的关键在于参数化查询、输入验证和最小权限原则的应用。

    超实用sql语句

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    Mysql查询表中最小可用id值的方法

    先把 sql 语句扔出来 // 这条语句在id没有1时,不能得到正确的查询结果。 select min(id+1) from oslist c where not exists (select id from oslist where id = c.id+1); 刚开始看到这条查询语句,完全是一脸懵X的...

    数据库操作语句大全(sql)

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    常用oracle查询语句

    这条语句可以捕捉 Oracle 数据库中运行时间很久的 SQL 语句,结果显示用户名、会话 ID、操作名称、进度、剩余时间和 SQL 语句文本。 11. 查看数据表的参数信息 SELECT partition_name, high_value, high_value_...

    SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具.docx

    - **攻击方式**:由于服务器端应用程序没有正确地验证和转义用户输入,攻击者可以在提交的数据中嵌入SQL关键字和逻辑,构造出恶意的SQL语句。 - **影响**:当恶意SQL语句被执行时,它可能导致数据泄露、数据修改、...

    SQL注入攻击与防范 (1).pdf

    当应用程序构建SQL语句时,它通常会结合用户的输入来动态生成查询。例如,一个简单的更新记录的SQL语句可能形如: ```sql UPDATE books SET title = 'Client_title' WHERE id = 12; ``` 如果用户输入的`Client_title...

    sql清除日志工具

    通过指定文件ID或文件名,可以将日志文件缩小到特定大小或最小大小。 5. **日志备份策略**:定期执行日志备份是保持日志大小合理的关键。这不仅可以释放空间,还可以作为灾难恢复计划的一部分。 6. **ALTER ...

    SQL删除表里的重复数据的两种方法

    2. **构建子查询**:利用`MIN()`函数结合`GROUP BY`子句,找出每组中的最小`job_id`作为唯一保留的记录。 ```sql -- 构建子查询:找出每组中的最小job_id SELECT MIN(job_id) AS job_id FROM jobs GROUP BY ...

    防止网站被注入sql破坏网站

    2. **基于联合查询的SQL注入**:利用UNION语句来组合多个查询结果。 3. **基于布尔逻辑的SQL注入**:通过观察不同的输入值对应用程序响应的影响来确定SQL查询的内容。 4. **基于时间延迟的SQL注入**:利用SLEEP()或...

    绿色 Sql Server 原理及全新管理工具

    一般情况下,正常安装sql server之后,master等系统数据库的路径都是被设置为绝对路径,如果要改正数据库的路径为相对路径,可以使用以下SQl语句: sql:=format(&#39; update sysaltfiles set filename=&#39;%s&#39;...

    java + SQL数据库连接池!!!!!!!!!!!!!

    3. 使用连接:程序执行SQL语句或其他数据库操作。 4. 归还连接:操作完成后,程序不应直接关闭连接,而是将连接返回给连接池,供其他请求使用。 5. 回收和销毁:连接池会定期检查池中的连接,如果发现有超时或不可用...

    oracle 常用语句常用语句

    - **`v$sql`**: 动态性能视图,提供了SQL语句执行的统计信息。 - **`username`**: 用户名。 - **`sid`**: 会话ID。 - **`opname`**: 正在执行的操作名称。 - **`progress`**: 运行进度百分比。 - **`time_remaining`...

    设计模式再谈

    根据提供的文件信息,可以看出标题、描述以及标签都指向了“设计模式再谈”这一主题,但实际内容却是一段SQL语句,与标题所指的主题不符。为了满足生成相关知识点的需求,这里将分为两个部分来阐述:一是围绕“设计...

    accp 4.0 sql server 内部测试

    根据给定的文件信息,我们可以总结出一系列与ACCp 4.0 SQL Server内部测试相关的IT知识点,这些知识点涵盖了数据库管理、SQL语句构造、数据表操作以及SQL Server的特定功能等多个方面。 ### 1. 数据库理解与设计...

Global site tag (gtag.js) - Google Analytics