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

目录

一、需求

二、实现步骤

(一)数据表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.mfbz.cn/a/778846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

陈志泊主编《数据库原理及应用教程第4版微课版》的实验题目参考答案实验2

实验目的 1&#xff0e;掌握在SQL Server中使用对象资源管理器和SQL命令创建数据库与修改数据库的方法。 2&#xff0e;掌握在SQL Server中使用对象资源管理器或者SQL命令创建数据表和修改数据表的方 法&#xff08;以SQL命令为重点&#xff09;。 实验设备 操作系统:Win11…

C语言实现顺序表字符型数据排序

实现直接插入、冒泡、直接选择排序算法。 #include <stdio.h> #include <stdlib.h>typedef char InfoType;#define n 10 //假设的文件长度&#xff0c;即待排序的记录数目 typedef char KeyType; //假设的关键字类型 typedef struct { //记录类型KeyType…

最小权顶点覆盖问题-优先队列分支限界法-C++

问题描述: 给定一个赋权无向图 G(V,E)&#xff0c;每个顶点 v∈V 都有一个权值 w(v)。如果 U⊆V&#xff0c;U⊆V&#xff0c;且对任意(u,v)∈E 有 u∈U 或 v∈U&#xff0c;就称 U 为图 G 的一个顶点覆盖。G 的最小权顶点覆盖是指 G 中所含顶点权之和最小的顶点覆盖。对于给定…

干货分享 | HTTP代理与SOCKS5代理的优缺点

本次我们来聊聊HTTP代理和SOCKS5代理这两种常见的代理协议。了解它们的优缺点和搭建方法&#xff0c;可以帮助你在各种应用场景中选择最合适的代理方式。让我们一起来探索吧&#xff01; HTTP代理的优缺点 优点&#xff1a; 简单易用&#xff1a;HTTP代理主要用于处理HTTP协…

代码随想录算法训练营第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; 本题和…

Java多语言跨境电商外贸商城源码 tiktok商城系统源码 跨境电商源码

Java多语言跨境电商外贸商城源码 tiktok商城系统源码 跨境电商源码 技术栈 PC端使用&#xff1a;vueelementui 用户端使用&#xff1a;uniapp 管理端使用&#xff1a;vueelementui 后台服务使用&#xff1a;springbootmybatisplusmysql 功能描述&#xff1a; 对接PayPal…

统计是一门艺术(非参数假设检验)

1.定义 当总体分布未知&#xff0c;那么就需要一种与分布具体数学形式无关的统计推断方法&#xff0c;称为非参数方法 只能利用样本中的一般信息包括位置和次序关系等 稳健性强 2.符号检验 考虑问题&#xff1a; 小样本情况&#xff1a; 以概率为1/2的二项分布是对称的 两…

idea部署war包成功,但是接口404

场景 项目结构 xxx-xxx-app xxx-xxx-service xxx-xxx-webappapp/webapp依赖service&#xff0c;service中写了各种api&#xff0c;先别管它合不合理&#xff0c;正式环境用webapp发布。 本地配置tomcat启动&#xff0c;但是发现每次部署成功&#xff0c;但是service中的接口…

使用Ubuntu 22.04安装Frappe-Bench【二】

系列文章目录 第一章 使用VMware创建Ubuntu 22.04【一】 文章目录 系列文章目录前言什么是Frappe-Bench&#xff1f;使用安装ERPNext能实现什么效果&#xff1f; 官网给了一个说明 一、使用Ubuntu 22.04安装Frappe-Bench一、安装要求二、安装命令三、 可能出现问题 总结 前言 …

hnust 1816: 算法10-9:简单选择排序

hnust 1816: 算法10-9&#xff1a;简单选择排序 题目描述 选择排序的基本思想是&#xff1a;每一趟比较过程中&#xff0c;在n-i1(i1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。 在多种选择排序中&#xff0c;最常用且形式最为简单的是简单选择排序。…

JavaScript中的立即执行函数表达式(Immediately Invoked Function Expression, IIFE)

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介JavaScript中的立即执行函数表达式&#xff08;Immediately Invoked Function Expression, IIFE&#xff09;1. 引言2. IIFE的概念2.1 概述2.2 语法2.3 历史背景 3. IIFE的作用3.1 创建独立作用域3.2 模块化代码3.3 防止变量提升3.…

动态路由--RIP配置(思科cisco)

一、简介 RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的动态路由选择协议。 在RIP协议中&#xff0c;如果路由器A和网络B直接相连&#xff0c;那么路由器A到网络B的距离被定义为1跳。若从路由器A出发到达网络B需要…

Apache Seata分布式事务启用Nacos做配置中心

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Seata分布式事务启用Nacos做配置中心 Seata分布式事务启用Nacos做配置中心 项目地址 本文作…

FreeU: Free Lunch in Diffusion U-Net——【代码复现】

这篇文章发表于CVPR 2024&#xff0c;官网地址&#xff1a;ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net (CVPR2024 Oral) (github.com) 一、环境准备 提前准备好python、pytorch环境 二、下载项目依赖 demo下有一个requirements.txt文件&#xff0c; pip inst…

Fill - UVA 10603

网址如下&#xff1a; Fill - UVA 10603 - Virtual Judge (vjudge.net) 感觉有点浮躁&#xff0c;没法完全将思绪投入题的思考中 脑袋糊糊的 一道bfs题 代码如下&#xff1a; #include<queue> #include<cstdio> #include<cstring> #include<vector&g…

开放式耳机哪个牌子好?悠律、漫步者、韶音全面对比与推荐

对于现在的无线耳机市场而言&#xff0c;开放式耳机迎来的真正的大爆发&#xff0c;关键的是它采用了定向传声方式&#xff0c;我们在运动时除了可以感受到音乐带来的快乐外&#xff0c;还能时刻保持对外界环境音的警觉。 今天&#xff0c;我们将为大家详细对比推荐三款备受瞩…

Redis中list类型操作命令(操作演示、命令语法、返回值、时间复杂度、注意事项等)

文章目录 lpush 命令lrange 命令lpushx 命令rpush 命令rpushx 命令lpop 命令rpop 命令lindex 命令linsert 命令llen 命令lrem 命令ltrim 命令lset 命令blpop 和 brpop lpush 命令 从左侧向列表中插入指定的元素 语法&#xff1a;lpush key value [value……] 时间复杂度&#…

大厂面试官赞不绝口的后端技术亮点【后端项目亮点合集(2)】

本文将持续更新~~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命C…

第三方商城对接重构(HF202407)

文章目录 项目背景一、模块范围二、问题方案1. 商品模块整体来说这块对接的不是太顺利,梳理了几条大概的思路:2. 订单模块3. 售后4. 发票5. 结算单经验总结项目背景 作为供应商入围第三方商城成功,然后运营了一段时间,第三方通知要重构, 需要重新对接打通接口完成系统对接…

【网络管理工具】NETworkManager工具的基本使用教程

【网络管理工具】NETworkManager工具的基本使用教程 一、NETworkManager工具介绍1.1 NETworkManager简介1.2 NETworkManager特点1.3 NETworkManager使用场景 二、下载NETworkManager软件包2.1 下载地址2.2 下载软件 三、运行NETworkManager工具3.1 解压NETworkManager3.2 运行N…