ToB企服应用市场:ToB评测及商务社交产业平台
标题:
MySQL:如安在已经利用的数据表中增加一个自动递增的字段
[打印本页]
作者:
王海鱼
时间:
2024-9-10 16:14
标题:
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
微信名片
”字样,就会出现
我的二维码,欢迎沟通探讨。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4