sql 查询结果自增序号

在查询出的结果添加顺序递增序号:

SELECT @r:=@r+1,count(1) FROM
(SELECT @r:=0) init, [table]

每次查询需要重置@r,所以需要:

(SELECT @r:=0) init

其余的查询跟普通查询一致。

转载于:https://www.cnblogs.com/tanshuai1001/p/8777954.html

### 如何在 SQL 中设置自列从 1 开始并按顺序递 #### MySQL 数据库中的实现方式 对于 MySQL 数据库而言,如果想要让自列重新从 1 开始并且保持连续递的状态,则可以通过 `TRUNCATE` 命令来清除表内所有数据的同时重置 AUTO_INCREMENT 计数器回到初始状态[^2]。 另外一种情况是在插入新记录时发现自值出现了间断或者是由于删除操作造成了编号不再连贯。此时并不能简单地依靠 TRUNCATE 来解决问题,因为这将会丢失现有数据。为了使现有的非连续 ID 变得有序,可以考虑导出当前的数据至临时表格中,接着清空原表(即执行 TRUNCATE),最后再将之前备份下来的内容按照特定排序规则重新导入回去。 ```sql -- 创建测试用表 CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), PRIMARY KEY (id) ); -- 插入一些样本数据 INSERT INTO example(name) VALUES ('Alice'), ('Bob'); -- 清除表内容并将 auto_increment 设定为 1 TRUNCATE TABLE example; -- 或者当不想失去已有数据的情况下调整ID使其连续 -- 首先复制到临时表里 CREATE TEMPORARY TABLE temp_example AS SELECT * FROM example; DROP TABLE IF EXISTS example; -- 删除旧表结构 CREATE TABLE example LIKE old_table_name; -- 新建相同结构的新表 ALTER TABLE example AUTO_INCREMENT = 1; -- 明确指定起始值 INSERT INTO example(id,name) SELECT (@row_number:=@row_number+1), t.name FROM temp_example t, (SELECT @row_number := 0) r ORDER BY t.id ASC; -- 按照原有ID升序排列恢复数据 ``` #### 对于其他类型的数据库管理系统 - **Oracle**: 在 Oracle 中并没有直接类似于 MySQL 的自动量特性,而是依赖序列对象配合触发器共同作用以模拟这种行为。一旦定义好相应的 SEQUENCE 和 TRIGGER 后,默认情况下所产生的数值就是依次递而不重复的[^3]。 - **SQL Server**: 若要确保查询返回的结果集中包含一个基于某列或多列组合而来的连续整型标识符,可利用窗口函数 ROW_NUMBER() 实现这一点。不过需要注意的是这种方法仅适用于读取展示层面,并不会实际改变物理存储上的任何属性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值