作者:余振兴爱可生 DBA 团队成员,相熟 Oracle、MySQL、MongoDB、Redis,最近在盘 TiDB,善于架构设计、故障诊断、数据迁徙、灾备构建等等。负责解决客户 MySQL 及我司自研 DMP 数据库治理平台日常运维中的问题。热衷技术分享、编写技术文档。
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
本文目录
一、LOAD 根本背景
二、LOAD 根底参数
三、LOAD 示例数据及示例表构造
四、LOAD 场景示例
场景 1. LOAD 文件中的字段比数据表中的字段多场景 2. LOAD 文件中的字段比数据表中的字段少场景 3. LOAD 生成自定义字段数据场景 4. LOAD 定长数据五、LOAD 总结
LOAD 根本背景咱们在数据库运维过程中难免会波及到须要对文本数据进行解决,并导入到数据库中,本文整顿了一些导入导出时常见的场景进行示例演示。LOAD 根底参数文章后续示例均应用以下命令导出的 csv 格局样例数据(以 , 逗号做分隔符,以 " 双引号作为界定符)-- 导出根底参数select * into outfile '/data/mysql/3306/tmp/employees.txt'character set utf8mb4fields terminated by ','enclosed by '"'lines terminated by '\n'from employees.employees limit 10;-- 导入根底参数load data infile '/data/mysql/3306/tmp/employees.txt'replace into table demo.empcharacter set utf8mb4fields terminated by ','enclosed by '"'lines terminated by '\n'...LOAD 示例数据及示例表构造以下为示例数据,表构造及对应关系信息-- 导出的文件数据内容[root@10-186-61-162 tmp]# cat employees.txt"10001","1953-09-02","Georgi","Facello","M","1986-06-26""10002","1964-06-02","Bezalel","Simmel","F","1985-11-21""10003","1959-12-03","Parto","Bamford","M","1986-08-28""10004","1954-05-01","Chirstian","Koblick","M","1986-12-01""10005","1955-01-21","Kyoichi","Maliniak","M","1989-09-12""10006","1953-04-20","Anneke","Preusig","F","1989-06-02""10007","1957-05-23","Tzvetan","Zielinski","F","1989-02-10""10008","1958-02-19","Saniya","Kalloufi","M","1994-09-15""10009","1952-04-19","Sumant","Peac","F","1985-02-18""10010","1963-06-01","Duangkaew","Piveteau","F","1989-08-24"-- 示例表构造SQL > desc demo.emp;+-------------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------------+---------------+------+-----+---------+-------+| emp_no | int | NO | PRI | NULL | || birth_date | date | NO | | NULL | || first_name | varchar(16) | NO | | NULL | || last_name | varchar(16) | NO | | NULL | || fullname | varchar(32) | YES | | NULL | | -- 表新增字段,导出数据文件中不存在| gender | enum('M','F') | NO | | NULL | || hire_date | date | NO | | NULL | || modify_date | datetime | YES | | NULL | | -- 表新增字段,导出数据文件中不存在| delete_flag | char(1) | YES | | NULL | | -- 表新增字段,导出数据文件中不存在+-------------+---------------+------+-----+---------+-------+-- 导出的数据与字段对应关系emp_no birth_date first_name last_name gender hire_date"10001" "1953-09-02" "Georgi" "Facello" "M" "1986-06-26""10002" "1964-06-02" "Bezalel" "Simmel" "F" "1985-11-21""10003" "1959-12-03" "Parto" "Bamford" "M" "1986-08-28""10004" "1954-05-01" "Chirstian" "Koblick" "M" "1986-12-01""10005" "1955-01-21" "Kyoichi" "Maliniak" "M" "1989-09-12""10006" "1953-04-20" "Anneke" "Preusig" "F" "1989-06-02""10007" "1957-05-23" "Tzvetan" "Zielinski" "F" "1989-02-10""10008" "1958-02-19" "Saniya" "Kalloufi" "M" "1994-09-15""10009" "1952-04-19" "Sumant" "Peac" "F" "1985-02-18""10010" "1963-06-01" "Duangkaew" "Piveteau" "F" "1989-08-24"LOAD 场景示例场景 1. LOAD 文件中的字段比数据表中的字段多只须要文本文件中局部数据导入到数据表中-- 长期创立2个字段的表构造SQL > create table emp_tmp select emp_no,hire_date from emp;SQL > desc emp_tmp;+-----------+------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-----------+------+------+-----+---------+-------+| emp_no | int | NO | | NULL | || hire_date | date | NO | | NULL | |+-----------+------+------+-----+---------+-------+-- 导入数据语句load data infile '/data/mysql/3306/tmp/employees.txt'replace into table demo.emp_tmpcharacter set utf8mb4fields terminated by ','enclosed by '"'lines terminated by '\n'(@C1,@C2,@C3,@C4,@C5,@C6) -- 该局部对应employees.txt文件中6列数据-- 只对导出数据中指定的2个列与表中字段做匹配,mapping关系指定的程序不影响导入后果set hire_date=@C6, emp_no=@C1; -- 导入数据后果示例SQL > select * from emp_tmp;+--------+------------+| emp_no | hire_date |+--------+------------+| 10001 | 1986-06-26 || 10002 | 1985-11-21 || 10003 | 1986-08-28 || 10004 | 1986-12-01 || 10005 | 1989-09-12 || 10006 | 1989-06-02 || 10007 | 1989-02-10 || 10008 | 1994-09-15 || 10009 | 1985-02-18 || 10010 | 1989-08-24 |+--------+------------+10 rows in set (0.0016 sec)场景 2. LOAD 文件中的字段比数据表中的字段少表字段不仅蕴含文本文件中所有数据,还蕴含了额定的字段-- 导入数据语句load data infile '/data/mysql/3306/tmp/employees.txt'replace into table demo.empcharacter set utf8mb4fields terminated by ','enclosed by '"'lines terminated by '\n'(@C1,@C2,@C3,@C4,@C5,@C6) -- 该局部对应employees.txt文件中6列数据-- 将文件中的字段与表中字段做mapping对应,表中多出的字段不做解决set emp_no=@C1, birth_date=@C2, first_name=@C3, last_name=@C4, gender=@C5, hire_date=@C6;
...