首页 > 数据库 >sql:递减/递减更新一列字段值

sql:递减/递减更新一列字段值

时间:2022-11-03 18:32:12浏览次数:36  
标签:段值 name age student sql +----+--------+-----+ 递减 tb id

(目录)

需求说明

  • 新加一个字段age
  • 按照id逆序(由大到小)排序递增设置age字段值

即:

  • id最大的那行的age字段值设置为1
  • id最小的那行的age字段值设置为最大值

最终实现效果

select * from tb_student;
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | Tom    |   5 |
|  2 | Jack   |   4 |
|  3 | Steve  |   3 |
|  4 | Yellow |   2 |
|  5 | Green  |   1 |
+----+--------+-----+

环境准备

select version();
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+

初始化数据表

CREATE TABLE `tb_student` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20)  NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
);


INSERT INTO `tb_student`(`id`, `name`) VALUES (1, 'Tom');
INSERT INTO `tb_student`(`id`, `name`) VALUES (2, 'Jack');
INSERT INTO `tb_student`(`id`, `name`) VALUES (3, 'Steve');
INSERT INTO `tb_student`(`id`, `name`) VALUES (4, 'Yellow');
INSERT INTO `tb_student`(`id`, `name`) VALUES (5, 'Green');

查看数据

select * from tb_student;
+----+--------+
| id | name   |
+----+--------+
|  1 | Tom    |
|  2 | Jack   |
|  3 | Steve  |
|  4 | Yellow |
|  5 | Green  |
+----+--------+

需求实现

增加列

ALTER TABLE `tb_student` 
ADD COLUMN `age` int(0) NOT NULL DEFAULT 0 AFTER `name`;

-- 此时的数据
select * from tb_student;
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | Tom    |   0 |
|  2 | Jack   |   0 |
|  3 | Steve  |   0 |
|  4 | Yellow |   0 |
|  5 | Green  |   0 |
+----+--------+-----+

关键SQL语句

SET @rownum = 1;
SELECT @rownum := @rownum + 1 AS num;
+------+
| num  |
+------+
|    2 |
+------+

递减更新age字段数据

SET @rownum = 0;

UPDATE tb_student 
SET age = ( SELECT @rownum := @rownum + 1 AS num )
ORDER BY id desc;

更新结果

select * from tb_student;
+----+--------+-----+
| id | name   | age |
+----+--------+-----+
|  1 | Tom    |   5 |
|  2 | Jack   |   4 |
|  3 | Steve  |   3 |
|  4 | Yellow |   2 |
|  5 | Green  |   1 |
+----+--------+-----+

标签:段值,name,age,student,sql,+----+--------+-----+,递减,tb,id
From: https://blog.51cto.com/mouday/5820709

相关文章

  • mysql 导入问题排查
    ERR]2006-MySQLserverhasgoneaway--查询最大数showglobalvariableslike'max_allowed_packet';--临时设置setglobalmax_allowed_packet=1024*1024*512;......
  • MySQL—简单,分组,条件查询
    MySQL1.什么是SQL:结构化查询语言(StructuredQueryLanguage)。2.SQL的作用:客户端使用SQL来操作服务器。启动mysql.exe,连接服务器后,就可以使用sql来操作服务器了。将......
  • 我想不通,MySQL 为什么使用 B 树来作索引?
    二叉树红黑树哈希表BTree谈谈一个潜在的误区=========我们首先需要澄清一点:MySQL跟B+树其实没有直接的关系,真正与B+树有关系的是MySQL的**「默认存......
  • mysql 本地navicat设置远程登录
    1usemysql;2selecthost,user,authentication_string,pluginfromuser;3updateusersethost='%'whereuser='root';123三个语句顺序执行完毕后重新启......
  • SqlServer 主从复制/读写分离及分表分库
    十年河东,十年河西,莫欺少年穷学无止境,精益求精参考:https://furion.baiqian.ltd/docs/dbcontext-read-writehttps://www.cnblogs.com/atomy/p/15356584.htmlhttps://www......
  • mysql索引创建
    1.创建语句*create语句创建索引 createindexindexNameontableName(columnName(length)); *alter语句创建索引 alteryabletableNameaddindexindexNa......
  • MySQL---逻辑架构
    逻辑架构逻辑结构剖析MySQL服务器处理客户端请求 Connectors:MySQL服务器之外的客户端程序;Managemen......
  • mysql datetime 精度问题
    记录一下mysqldatetime类型精度的坑业务中需要用到两个字段,开始时间start_time,截止时间end_time,根据实际业务场景,start_time取当天最早的那个时间点,end_time取当天时间......
  • MySQL导出表数据为Excel文件时变成E+15【原创】
    如标题所示,因为Excel数据格式变成E+15导致查出的数据不准确。上午百度也没搜出好的方法。想到了一个笨办法,先将文件导成txt,然后用UE列模式在数据前加一列单引号,在黏贴到Ex......
  • 什么是mysql数据库?MySQL的特点有哪些?
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Re......