论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
PostgreSQL
›
MySQL:如安在已经利用的数据表中增加一个自动递增的字 ...
MySQL:如安在已经利用的数据表中增加一个自动递增的字段 ...
王海鱼
金牌会员
|
2024-9-10 16:14:50
|
显示全部楼层
|
阅读模式
楼主
主题
894
|
帖子
894
|
积分
2682
目录
一、需求
二、实现步调
(一)数据表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
微信名片
”字样,就会出现
我的二维码,欢迎沟通探讨。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王海鱼
金牌会员
这个人很懒什么都没写!
楼主热帖
如何在 Vue 3 中使用<script lang=“t ...
Vue 和 Django 前后端分离实践 (注册 ...
在Winform开发中,使用Async-Awati异步 ...
一条SQL的执行原理
go中 for循环的坑
C#依赖注入(直白明了)讲解 一看就会系 ...
教务管理系统——数据库课程设计mysql+ ...
2023大数据面试总结
clickhouse的稀疏索引
银河麒麟V10安装达梦数据库DM8 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表