MySQL 对已存在数据表添加自增 ID 字段

系统环境:Ubuntu

数据库:MySQL5.7


主要是遗留问题,该表本来只是用于分析,同事没有添加自增id,造成后续在处理时,遇到一些问题,权衡之后,决定对表新增一个自增的id字段(表中已经存在大量数据,非业务表),为了节省时间,以下是个人的解决方法。避免了代码的开发。方法思路供参考!



1

outfile导出所有数据


select
replace(replace(replace(replace(title , '\r\n', ''), '\n', ''), char("32"), ''), '^', ''),
replace(replace(replace(replace(link          , '\r\n', ''), '\n', ''), char("32"), ''), '^', ''),
replace(replace(replace(replace(intro , '\r\n', ''), '\n', ''), char("32"), ''), '^', ''),
...
其他字段省略
)
from 库命.表名
where 1=1
-- limit 200
into outfile '/var/lib/mysql-files/all_202106.txt' 
fields terminated by '^' enclosed by '' 
lines terminated by '\r\n';


首先,将现有数据导出,放到服务器本地上面使用了大量的replace,是因为里面的数据是爬虫所得,格式不统一,且文本中存在大量的空格,跨行等特殊符号需要替换处理,同时为了避免文本中存在和分隔符相同的符号,我们也将其替换为空。导出数据,这里字段分隔符为“^”。



2

sed每行行首添加空字符


sed 's/^/""^&/g' all_202106.txt > all_20210602.txt


将上面导出的数据,通过sed命令,给每行行首添加一个空字符,并以“^”分割,和导出时数据分隔符保持一致。后面通过设置数据库ID为自增,为每个ID生成唯一标识。



3

LOAD DATA导入MySQL


LOAD DATA local INFILE '/var/lib/mysql-files/all_20210602.txt' IGNORE INTO TABLE 库命.新表名 
CHARACTER SET utf8mb4 FIELDS TERMINATED BY '^' ENCLOSED BY '' LINES TERMINATED BY '\r\n' ignore 1 lines (
id           ,
title ,
link         ,
....
其他字段省略
);


将修改好的数据直接再导入到新建的数据库表(新增ID字段,设置ID自增),同时注意导入时设置字符编码格式为UTF8mb4,防止出现中文乱码的情况。


至此,对已存在数据库表添加自增ID操作完成。导出,添加行首空字符,再导入MySQL一共花费3个小时左右时间,基本都花费在导出和导入。


注意:outfile时,如果提示无法导出,是因为数据库outfile导出功能没有开启,或者导出路径没有添加。可以调整secure-file-priv参数的值,具体请自行百度解决。

相关推荐

  • 今日公开课|面试通关之从RabbitMQ、Kafka到RocketMQ
  • 《狂飙》播完了,孙红雷的强盛集团也赚了.....
  • 颠覆美国科技界的华裔天才出生 | 历史上的今天
  • 微信文章底部增加淘宝入口;Google 推出 ChatGPT 竞品 Bard;苹果或推出无接口设计iPhone|极客头条
  • Redis面试夺命十六问,我差点就没抗住!
  • 字节一面:HTTP 长连接和 TCP 长连接有区别?
  • git pull 提示错误 fatal: refusing to merge unrelated histories
  • 一行代码引发的“血案”:价值5亿欧元的火箭,发射40秒后凌空爆炸
  • Twitter 将向开发者收取 API 访问费用,网友吐槽:这是在“作死”
  • 如何使用机器学习来有效管理 Kubernetes 资源
  • 谷歌宣布支持使用Rust开发Chromium
  • 低代码编程及其市场机遇剖析 | 低代码技术内幕
  • 《Cython 从入门到精通》PDF 版本新鲜出炉啦!!!
  • 4点精要:如何从架构图开始让架构设计平滑落地 | 极客时间
  • 红队培训之内网渗透
  • 建议收藏!这 10 几个,高级开发用的 Git 命令,个个惊艳!
  • 教ChatGPT学会看图的方法来了
  • 《时代》专访ChatGPT:我还有很多局限,但人类应准备好应对AI
  • 成年人有权做个废物;女网红被父亲处决;美方称发现第二个中国气球;茅台起诉拼多多;以岭药业市值两月蒸发 411亿...|酷玩日爆
  • 恩师和领导的区别 | 每日一冷