MySQL:如何在已经使用的数据表中增加一个自动递增的字段

news2025/2/24 23:55:24

目录

一、需求

二、实现步骤

(一)数据表students

(二)添加整型字段

(三)更新SID字段的值

1、使用用户定义的变量和JOIN操作

2、用SET语句和@rownum变量

(1)操作方法

(2)实际操作

(3)操作效果

(四)设置AUTO_INCREMENT(可选不推荐)


一、需求

        在MySQL中,数据表students已经使用了一段时间,其中存在很多记录。但是数据表students在建立之初,没有设定一个id字段,因此给统计和分析带来不便。现在想在数据表students增加一个整型的非主键字段SID,并希望这个字段的值从1开始递增,不能影响现存的数据。

        这种在数据表中自动递增的字段,在视频监控平台的众多应用中非常多,合理的自动递增字段,对整个系统的数据表的调用、统计非常有用。

二、实现步骤

(一)数据表students

       如下图所示,为数据表students的定义,可以看出学号studentNo是主键,不能为空;name也不能为空。

(二)添加整型字段

        需要在students表中添加一个整型字段SID。由于这个字段不是主键,并且是递增的,但不需要它作为表的唯一标识,可以简单地将它添加为普通整型字段,而不立即设置AUTO_INCREMENT属性(因为AUTO_INCREMENT通常与主键一起使用)。

        命令如下:

ALTER TABLE students ADD COLUMN SID INT;

        实际操作如下:

        查看数据表students的结构,如下:

        由图可以看出,字段添加成功。

(三)更新SID字段的值

        要求SID字段的值从1开始递增,那需要更新这个字段以反映这一点。由于MySQL没有直接的内置函数来按行号递增更新列(像SQL Server中的ROW_NUMBER()函数那样),需要使用一些创造性的方法来实现这一点。

1、使用用户定义的变量和JOIN操作

        一种方法是使用用户定义的变量和UPDATE语句的JOIN操作(或者更具体地说,是一个子查询或派生表),但这在MySQL中可能有些复杂,特别是当涉及到保持递增顺序与表中现有行的顺序一致时。

2、用SET语句和@rownum变量

        一个更简单但可能不是最优化的方法是使用SET语句和@rownum变量在单个查询中更新所有行。

(1)操作方法

       操作命令的语法如下:

SET @rownum := 0;

UPDATE students

SET SID = (@rownum := @rownum + 1)

ORDER BY <some_column> ASC;  -- <some_column>应该是希望根据它来递增SID的列,比如ID或创建日期

        实际操作语句如下:

SET @rownum := 0;

UPDATE students

SET SID = (@rownum := @rownum + 1)

ORDER BY studentNo ASC; 

(2)实际操作

        实际操作如下:

(3)操作效果

       上述操作完成后,查看数据表,可以看出SID的数据实现了递增,达到需求的目标。具体如下图:

        注意:虽然上面的UPDATE语句在MySQL中通常是有效的,但官方文档并没有明确保证ORDER BY在UPDATE语句中的行为是确定的,特别是在没有LIMIT子句的情况下。然而,在大多数情况下,它按预期工作,并且是按ORDER BY指定的顺序递增SID的。

(四)设置AUTO_INCREMENT(可选不推荐)

        虽然SID字段不是主键,但如果确实希望MySQL在将来插入新行时自动递增这个字段(尽管这通常不是非主键字段的用途),可以尝试将其设置为AUTO_INCREMENT。但是,由于AUTO_INCREMENT通常与主键相关联,并且每个表只能有一个AUTO_INCREMENT列,因此如果students表已经有一个AUTO_INCREMENT主键,则不能这样做。

        此外,即使能够设置SID为AUTO_INCREMENT(例如,如果表没有主键或移除了现有的AUTO_INCREMENT主键),MySQL也不会在现有行上自动更新SID的值以反映递增序列;它只会在新插入的行上自动设置SID的值。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1902091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

法向量 - 平面上的法向量和曲面上的法向量

法向量 - 平面上的法向量和曲面上的法向量 flyfish 平面上的法向量 &#xff1a; 定义了一个平面 z 0 z 0 z0。 法向量是 (0, 0, 1)&#xff0c;表示垂直于平面的向上方向。 使用 quiver 函数在平面上绘制法向量。 曲面上的法向量 &#xff1a; 定义了一个曲面 z x 2…

硬件开发工具Arduino IDE

招聘信息共享社群 关联上篇文章乐鑫ESPRESSIF芯片开发简介 Arduino IDE&#xff08;集成开发环境&#xff09;是为Arduino硬件开发而设计的一款软件&#xff0c;它提供了一个易于使用的图形界面&#xff0c;允许用户编写、编辑、编译和上传代码到Arduino开发板。Arduino IDE的…

封装日历uniapp,只显示年月不显示日

默认展示最新日期 子组件 <template><view class"date-picker"><picker mode"date" fields"month" change"onDateChange" :value"selectedDate"><view class"picker">{{ selectedDate…

SQL-DCL(三)

一.DCL介绍 DCL英文全称是Data Control Language(数据库控制语言),用来管理数据库 用户,控制数据库的访问权限。 二.两个方面 1.数据库可以由那些用户访问 2.可以访问那些内容 三.DCL-管理用户 1.查询用户 USE mysql SELECT * FROM user 2.创建用户 CREATE USER…

Raylib 坐标系

draftx 符号调整为正数 发现采样坐标系原点0&#xff0c;0 在左上角&#xff0c;正方向 右&#xff0c;下 绘制坐标系 原点0&#xff0c;0 在左下角&#xff0c;正方向 右&#xff0c;上 拖拽可得 #include <raylib.h> // 重整原因&#xff1a;解决新函数放大缩小之下…

代码随想录算法训练营第23天|LeetCode 39. 组合总和、40.组合总和II、131.分割回文串

1. LeetCode 39. 组合总和 题目链接&#xff1a;https://leetcode.cn/problems/combination-sum/description/ 文章链接&#xff1a;https://programmercarl.com/0039.组合总和.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1KT4y1M7HJ 思路&#xff1a; 本题和…

【算法笔记自学】第 6 章 C++标准模板库(STL)介绍

6.1vector常见用法详解 #include <cstdio> #include <vector> using namespace std;int main() {int n, x;scanf("%d", &n);vector<int> v;for (int i 0; i < n; i) {scanf("%d", &x);v.push_back(x);}for (int i 0; i <…

方法引用详解

什么是方法引用&#xff1f;&#xff1a;针对于函数式接口中的抽象方法 为什么用方法引用&#xff1f;&#xff1a;避免代码的重复&#xff0c;简便书写&#xff0c;提高效率 在使用Lambda表达式的时候&#xff0c;我们实际上传递进去的代码就是一种解决方案&#xff1a;拿参数…

第15章 奇异值分解:习题解答及其案例

这一章初学建议看该视频学习&#xff0c;讲得歪瑞古德&#xff1a; 《统计学习方法》李航 第15章奇异值分解 1.矩阵的奇异值分解是指将 m n m \times n mn实矩阵 A A A表示为以下三个实矩阵乘积形式的运算 A U Σ V T A U \Sigma V ^ { T } AUΣVT 其中 U U U是 m m m阶正…

文件读写操作之c语言、c++、windows、MFC、Qt

目录 一、前言 二、c语言文件读写 1.写文件 2.读文件 三、c文件读写 1.写文件 2.读文件 四、windows api文件读写 1.写文件 2.读文件 五、MFC文件读写 1.写文件 2.读文件 六、Qt文件读写 1.写文件 2.读文件 七、总结 一、前言 我们在学习过程中&#xff0c…

图像分类-数据驱动方法

K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09; KNN算法通过比较新样本与训练集中的样本的距离&#xff0c;然后根据最近的K个邻居的投票结果来决定新样本的分类。 如图所示&#xff0c;K越大的边界会更加平滑&#xff0c;本质上是根据某一样本最近…

从0到1:培训老师预约小程序开发笔记二

背景调研 培训老师预约小程序&#xff1a; 教师和学生可以更便捷地安排课程&#xff0c;并提升教学质量和学习效果&#xff0c;使之成为管理和提升教学效果的强大工具。培训老师可以在小程序上设置自己的可预约时间&#xff0c;学员可以根据老师的日程安排选择合适的时间进行预…

对接海康sdk-linux下复制jar包中resource目录的文件夹

背景 在集成海康sdk时,需要将一些组件放到项目中作为静态资源,并且海康的sdk初始化也需要加载这些静态资源,在windows下,使用一些File路径的方式是可以正确加载的,但是在linux上就会加载失败。 首先我是将海康的sdk组件放到resource下的,并且按照windows和linux设置了两…

【硬件产品经理】硬件产品手板设计

目录 简介 硬件手板 手板资料 作者简介 简介 今天来聊聊产品手板这个话题。 到了手板这个层面其实就属于产品设计细节了&#xff0c; 无论你对整个开发体系如何如何了解&#xff0c; 对公司管理流程如何如何精通。 最终都是要回归到业务细节中去的&#xff0c; 你可能…

6800和8080单片机读写时序和液晶屏接口

前言&#xff1a; 随着单片机发展&#xff0c;集成度越来越高&#xff0c;因此目前单片机较少使用RD和WR信号操作外设&#xff0c;因此很多时候&#xff0c;变成了6800和8080单片机读写液晶屏了。早期的读写本质上是对一个地址进行即时的操作&#xff0c;现在可能是等数据送到…

信号与系统-实验6-离散时间系统的 Z 域分析

一、实验目的 1、掌握 z 变换及其性质&#xff1b;了解常用序列的 z 变换、逆 z 变换&#xff1b; 2、掌握利用 MATLAB 的符号运算实现 z 变换&#xff1b; 3、掌握利用 MATLAB 绘制离散系统零、极点图的方法&#xff1b; 4、掌握利用 MATLAB 分析离散系统零、极点的方法&a…

Docker部署Seata与Nacos整合

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Docker部署Seata与Nacos整合 Docker 部署 Seata 与 Nacos 整合 运行所使用的 demo项目地址 …

最近你悟出来什么道理?

点击上方△腾阳 关注 转载请联系授权 大家伙&#xff0c;我是腾阳。 活了近30年的我&#xff0c;终于领悟到&#xff0c;人生的旅途是一场深刻而复杂的自我发现与灵魂成长的壮丽征途。 这不仅仅是对外在世界的探索&#xff0c;更是内心深处的一场革命&#xff0c;是灵魂从懵…

移动应用开发课设——原神小助手文档(1)

2023年末&#xff0c;做的移动应用开发课设&#xff0c;分还算高&#xff0c;项目地址&#xff1a;有帮助的话&#xff0c;点个赞和星呗~ GitHub - blhqwjs/-GenShin_imp: 2023年移动应用开发课设 本文按照毕业论文要求来写&#xff0c;希望对大家有所帮助。 xxxx大学课程设计报…

SpringBoot 生产实践:没有父 starter 的打包问题

文章目录 前言一、搜索引擎二、Chat GPT三、官方文档四、小结推荐阅读 前言 今天刚准备写点文章&#xff0c;需要 SpringBoot 项目来演示效果。一时心血来潮&#xff0c;没有采用传统的方式&#xff08;即通过引入 spring-boot-starter-parent 父工程的方式&#xff09;。 &l…