关于MYSQL的LOAD DATA LOCAL INFILE.

本文介绍了一个Shell脚本,用于从文件中读取数据并将其加载到MySQL数据库的指定表格中。脚本首先解析文件名以获取日期、源和版本信息,然后使用rsync进行文件同步,并通过LOAD DATA LOCAL INFILE命令将数据导入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下段代码是从文件读取数据,加载到mysql数据库里的shell脚本....

 

 

文件格式是

column1/t column2/t column3/n

column1/t column2/t column3/n

column1/t column2/t column3/n

column1/t column2/t column3/n

 

注意后面的SET关键字.

他是给dump文件内容除外,另加column的部分...

 

注释有时间再加..

<think>我们正在讨论MySQLLOAD DATA LOCAL INFILE命令,该命令用于将本地文本文件中的数据导入到数据库表中。根据引用内容,我们可以总结出以下关键点: 1. 基本语法:`LOAD DATA LOCAL INFILE '文件路径' INTO TABLE 表名` [^2][^3] 2. 可以指定字段分隔符(如TAB、逗号等)和行分隔符(如换行符)[^3][^4] 3. 可以指定字符集(如gbk)[^4] 4. 可以指定要导入的列[^3] 5. 默认情况下,要求数据文件中的列与表中的列顺序和数量一致,但可以通过指定列名来映射[^3] 现在,我们将按照以下步骤详细说明如何使用LOAD DATA LOCAL INFILE: ### 1. 准备数据文件 数据文件应该是文本格式,每行代表一条记录,字段之间用特定的分隔符(如TAB、逗号等)分隔。例如,一个用逗号分隔的文件(CSV)可能如下: ``` "张三",25,"工程师" "李四",30,"产品经理" ``` ### 2. 基本导入命令 ```sql LOAD DATA LOCAL INFILE '文件路径' INTO TABLE 表名 FIELDS TERMINATED BY '字段分隔符' -- 例如:',' 或 '\t'(制表符) ENCLOSED BY '"' -- 可选,字段包围符,如双引号 LINES TERMINATED BY '行分隔符' -- 例如:'\n'(Unix/Linux)或 '\r\n'(Windows) (列1, 列2, 列3); -- 可选,指定要导入的列(如果文件列顺序与表不一致或只导入部分列) ``` ### 3. 处理字符集 如果文件使用的字符集与数据库默认字符集不同,可以使用`CHARACTER SET`指定: ```sql LOAD DATA LOCAL INFILE '文件路径' INTO TABLE 表名 CHARACTER SET gbk -- 指定文件字符集 ... ``` ### 4. 忽略错误 使用`IGNORE`关键字可以忽略一些错误(如重复主键): ```sql LOAD DATA LOCAL INFILE ... IGNORE ... ``` ### 5. 示例 假设有一个表`employee`,包含`name`, `age`, `title`三列,数据文件`d:/data.txt`是用分号分隔,每行以`\r\n`结束,字符集为UTF8,并且文件中的列顺序与表一致。 命令如下: ```sql LOAD DATA LOCAL INFILE 'd:/data.txt' INTO TABLE employee CHARACTER SET utf8 FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' (name, age, title); ``` ### 注意事项 - 需要确保MySQL服务有权限读取该文件。 - 如果使用`LOCAL`关键字,则文件位于客户端主机上,否则位于服务器主机上。 - 使用`LOCAL`时,需要配置MySQL客户端和服务器允许本地文件加载(可能需要设置`local_infile=1`)。 ### 启用LOCAL功能 在连接MySQL时,可能需要显式启用LOCAL功能。例如,在命令行客户端连接时: ```bash mysql --local-infile=1 -u username -p ``` 或者在MySQL会话中设置: ```sql SET GLOBAL local_infile=1; ``` ### 错误处理 如果遇到错误,如“The used command is not allowed with this MySQL version”,则需要检查`local_infile`系统变量是否开启。 以上内容综合了引用的信息[^2][^3][^4],并进行了扩展说明。 §§相关问题§§ 1. 如何解决LOAD DATA LOCAL INFILE命令的权限问题? 2. 使用LOAD DATA LOCAL INFILE时如何跳过文件中的第一行(标题行)? 3. LOAD DATA LOCAL INFILE和INSERT语句在性能上有什么区别?</think>### MySQL LOAD DATA LOCAL INFILE 使用方法详解 `LOAD DATA LOCAL INFILE` 命令用于将本地文本文件高效导入到 MySQL 数据库中。以下是详细使用方法和注意事项: #### 1. **基本语法** ```sql LOAD DATA LOCAL INFILE '文件路径' INTO TABLE 表名 [FIELDS 子句] [LINES 子句] [IGNORE 行数 LINES] [(列1, 列2, ...)] ``` #### 2. **核心参数说明** - **文件路径**:本地文件绝对路径(如 `'C:/data/import.txt'`),注意使用正斜杠 - **字段处理**(关键参数): ```sql FIELDS TERMINATED BY '分隔符' -- 如 ',' 或 '\t'(制表符) ENCLOSED BY '包围符' -- 如 '"'(双引号) ESCAPED BY '转义符' -- 默认为 '\' ``` - **行处理**: ```sql LINES TERMINATED BY '行结束符' -- 如 '\n'(Linux)或 '\r\n'(Windows) ``` - **跳过标题行**: ```sql IGNORE 1 LINES -- 跳过第一行(如CSV标题行) ``` - **指定列映射**: ```sql (col1, col2, col3) -- 文件列与表列按顺序对应 ``` #### 3. **完整示例** ```sql LOAD DATA LOCAL INFILE '/tmp/employees.csv' INTO TABLE employees CHARACTER SET utf8mb4 -- 指定字符集 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES -- 跳过CSV标题行 (emp_id, name, department, salary); ``` #### 4. **关键注意事项** 1. **权限配置**: - 需在 MySQL 配置文件 (`my.cnf`) 添加: ```ini [mysql] local-infile=1 [mysqld] local_infile=1 ``` - 或运行时启用: ```sql SET GLOBAL local_infile = 1; ``` 2. **文件格式要求**: - 默认字段分隔符是制表符 `\t` - 文本编码需与数据库一致(用 `CHARACTER SET` 指定) - Windows 文件需设置 `LINES TERMINATED BY '\r\n'` 3. **错误处理**: - 添加 `REPLACE` 或 `IGNORE` 关键字处理主键冲突: ```sql LOAD DATA ... REPLACE ... -- 替换重复记录 ``` #### 5. **性能优化建议** - 导入前禁用索引: ```sql ALTER TABLE 表名 DISABLE KEYS; -- 执行LOAD DATA... ALTER TABLE 表名 ENABLE KEYS; ``` - 大文件导入时关闭自动提交: ```sql SET autocommit=0; -- 执行LOAD DATA... COMMIT; ``` #### 6. **常见错误解决** - **ERROR 1148 (42000)**:未启用本地加载 ```sql mysql --local-infile=1 -u user -p # 连接时启用 ``` - **ERROR 2068 (HY000)**:文件路径错误 ```bash chmod 644 /path/to/file # 确保文件可读 ``` > **提示**:对于 CSV 文件导入,推荐先用文本编辑器验证文件格式(如无BOM头),复杂数据清洗可使用 Python 预处理后再导入[^1][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值