前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MySQL 对已存在数据表添加自增 ID 字段

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

作者头像
终码一生
发布于 2022-04-14 07:38:56
发布于 2022-04-14 07:38:56
3.6K00
代码可运行
举报
文章被收录于专栏:终码一生终码一生
运行总次数:0
代码可运行

系统环境:Ubuntu

数据库:MySQL5.7

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

outfile导出所有数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,是因为里面的数据是爬虫所得,格式不统一,且文本中存在大量的空格,跨行等特殊符号需要替换处理,同时为了避免文本中存在和分隔符相同的符号,我们也将其替换为空。导出数据,这里字段分隔符为“^”。

sed每行行首添加空字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sed 's/^/""^&/g' all_202106.txt > all_20210602.txt

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

LOAD DATA导入MySQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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参数的值,具体请自行百度解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 终码一生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL数据的导入与导出
https://blog.csdn.net/caoxiaohong1005/article/details/72571798
九转成圣
2024/04/10
1070
MySQL数据的导入与导出
Mysql数据库备份还原和数据表、数据导出导入
mysqldump -uroot -p'pwd' -B db1db2 | gzip >/db_back.sql.gz 
菲宇
2022/12/02
6.5K0
MySQL数据库基础——本地文件交互
从这一篇开始,大概会花四五篇的内容篇幅,归纳整理一下之前学过的SQL数据库,一来可以为接下来数据分析工作提前巩固基础,二来把以前学的SQL内容系统化、结构化。 今天这一篇仅涉及MySQL与本地文本文件的导入导出操作,暂不涉及主要查询语言以及MySQL与R语言和Python的交互。 平台使用Navicat Premium(当然你也可以使用MySQL自带的workbench或者MySQL Conmand line)。 以下仅涉及MySQL中使用命令行语句导入/导出本地磁盘的文本文件(csv\txt文件)。 文件
数据小磨坊
2018/04/12
7K0
MySQL数据库基础——本地文件交互
网络工程师需要懂的基本SQL命令、表命令
修改会受到原有数据限制,如果原有数据不能满足新的数据类型,修改不会成功,会报错,超出范围 out of range
网络技术联盟站
2021/02/22
9250
MySQL – LOAD DATA LOCAL INFILE将数据导入表中
该LOAD DATA语句以非常高的速度将文本文件中的行读入表中。 LOAD DATA是补充 SELECT ... INTO OUTFILE。要将表中的数据写入文件,请使用 SELECT ... INTO OUTFILE。要将文件读回表中,请使用 LOAD DATA。两个语句的FIELDS和LINES子句的语法 相同。
kirin
2020/11/27
4.5K0
MySQL数据导入方案场景推荐
应用侧的同学需要对数据进行导出和导入,于是跑来找 DBA 咨询问题:MySQL 如何导入大批量的数据?
bisal
2023/10/19
3130
MySQL 备份与恢复详解
物理备份是指通过拷贝数据库文件的方式完成备份,这种备份方式适用于数据库很大,数据重要且需要快速恢复的数据库
星哥玩云
2022/08/17
1.2K0
MySQL 备份与恢复详解
MySQL从删库到恢复,还用跑路吗?
误删数据库应该如何恢复操作?怎样才能做好数据库的备份、恢复、容灾、HA?如果你身处数据库行业,最近可能会比较关注这几个问题
搜云库技术团队
2019/10/17
1.3K0
MySQL 数据导入与导出的深入解析
在现代数据库管理中,数据的导入与导出是日常工作的重要组成部分。MySQL 提供了高效且易用的命令用于实现数据的文件级迁移,包括从数据库导出到文件以及从文件导入到数据库的操作。本文将深入探讨 MySQL 的 SELECT ... INTO OUTFILE 和 LOAD DATA INFILE 两个命令,涵盖其用法、原理、场景和潜在问题。
九转成圣
2025/01/20
1330
MySQL 数据备份恢复(一)select into outfile & load data infile
load data infile 和 select into outfile 是 MySQL 用于导入和导出数据的命令。select into outfile 语句用于将检索出来的数据按格式导出到文件中。load data infile 是将带有格式的数据文件导入到表中。使用 load data infile 的方式插入数据比直接执行 insert 语句插入至少快几十倍。
Se7en258
2021/07/01
3.8K0
MySQL技能完整学习列表10、数据导入和导出——1、数据导入(LOAD DATA, mysqldump)——2、数据导出(SELECT ... INTO OUTFILE, mysqldump)
MySQL提供了多种数据导入和导出的方法,其中LOAD DATA和mysqldump是两个常用的命令。下面将详细说明这两个命令的使用方法,并提供具体的示例。
红目香薰
2023/12/01
4640
技术分享 | MySQL Load Data 的多种用法
2. 如果表结构和文本数据不一致,建议将文本文件中的各列依次顺序编号并与表中字段建立 mapping 关系,以防数据导入到错误的字段
爱可生开源社区
2021/04/07
1.9K0
技术分享 | MySQL Load Data 的多种用法
MySQL DML 数据操作
如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据,否则直接插入新数据。
恋喵大鲤鱼
2023/10/12
2060
MySQL数据导入导出方法与工具mysqlimport
mysqlimport位于mysql/bin目录中,是mysql的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量的选项可供选择。这个工具把一个文本文件(text file)导入到你指定的数据库和表中。比方说我们要从文件Customers.txt中把数据导入到数据库Meet_A_Geek中的表Custermers中:  mysqlimport Meet_A_Geek Customers.txt
一见
2018/08/07
3.3K0
mysql数据备份-导入与导出数据
数据导入: 把系统文件的内容存储到数据库服务器的表里。 命令格式: LOAD DATA INFILE “目录名/文件名” INTO TABLE 库.表名 FIELDS TERMINATED BY “分隔符” LINES TERMINATED BY “\n”; 把系统文件/etc/passwd的内容存储到userdb库下的user表里。 (/etc/passwd的内容格式:root:x:uid:gid:root:/root:/bin/bash) >create database userdb;
吴柯
2018/04/16
3.2K0
第19章_数据库备份与恢复
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/07
6310
第19章_数据库备份与恢复
【说站】mysql表导出的两种方法
2、使用mysqldump导出数据为文本。mysqldump实际调用的就是后者提供的接口,并在其上面添加了一些新的功能而已。
很酷的站长
2022/11/23
3.1K0
MySQL 导入数据
MySQL 中提供了LOAD DATA INFILE语句来插入数据。 以下实例中将从当前目录中读取文件 dump.txt ,将该文件中的数据插入到当前数据库的 mytbl 表中。
拓荒者
2019/03/15
9.7K0
三种MySQL数据导出方式
常见的MySQL数据导出有三种形式 SELECT ... INTO OUTFILE ---- SELECT * FROM person INTO OUTFILE '/var/lib/mysql-files/person.data'; LOAD DATA INFILE LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作 常用选项 FIELDS TERMINATED BY ',':字段分隔符 ENCLOSED BY '"':包围字段的符号 LINES TER
十毛
2019/04/01
9.9K0
MySQL 备份恢复(二)
前面一篇已经介绍了MySQL 备份相关的原理与方法,要是还没有来得及看的可以戳此查看『MySQL 备份恢复(一)』,那么今天就接着上一篇的内容继续谈谈备份恢复相关内容。数据备份是 DBA 非常重要的工作之一,系统意外奔溃或者硬件损坏都可能导致数据库的数据丢失,因此 MySQL DBA 应该定期备份数据,使得意外发生时尽可能的减少损失。数据备份在工作中是重中之重,安全很重要。
JiekeXu之路
2019/06/20
2.6K0
MySQL 备份恢复(二)
推荐阅读
相关推荐
MySQL数据的导入与导出
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文