mysql - 将 csv 导入到 sql bash

标签 mysql sql bash csv zsh

我正在尝试编写一个 bash 脚本来删除数据库中的所有表,然后将所有 csv 文件导入给定目录中。我有几个问题:

  1. 使用脚本导入 1 个 csv 会出现以下错误:

    ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BULK
    INSERT paf_addresses
    FROM '../sql/paf-sample.csv'
    WITH
    (
    FIELDTERMINATOR = ' at line 1
    
  2. 如何告诉 mysql 部分为设置目录中的每个文件运行


我的脚本如下。

#!/bin/bash

detail="propertystork"
AWK=$(which awk)
GREP=$(which grep)

TABLES=$(mysql -u $detail -p$detail $detail -e 'show tables' | $AWK '{ print $1}' | $GREP -v '^Tables' )

for t in $TABLES
do
  mysql -u $detail -p$detail $detail -e "drop table $t"
done

mysql -u $detail -p$detail -h localhost $detail <<-_END-OF-SCRIPT_

BULK
INSERT paf_addresses
FROM '../sql/paf-sample.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
_END-OF-SCRIPT_

最佳答案

错误是由于MySQL中没有BULK INSERT语句造成的。

取而代之的是 LOAD DATA INFILE

LOAD DATA INFILE '../sql/paf-sample.csv'
INTO table_name
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'

关于mysql - 将 csv 导入到 sql bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21010525/

相关文章:

mysql - SQL 查询查询不正确。不确定出了什么问题

mysql - 这个查询有什么问题?路径

mysql - CONCAT 字符串中列中的最后一个数字

sql - 将更新的列返回到数组变量中

linux - 如何将 time 命令的输出重定向到 Linux 中的文件?

mysql - 从第二个查询的平均值中减去第一个查询的平均值

mysql - 每月向 Mysql 数据库中的列添加值

linux - 在 bash 中扩展一个可能的相对路径

Bash 脚本中的正则表达式

php - 当我输入 $time=strftime ('%c' );它显示值 00 :00:00 in database