【问题标题】:Import csv to sql bash将csv导入sql bash
【发布时间】:2014-01-09 02:21:04
【问题描述】:

我正在尝试编写一个 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 sql bash csv zsh


    【解决方案1】:

    该错误是由于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'
    

    【讨论】:

    • 我正在处理 2008 年的 this 博客文章,其中说有,还是我误解了它?
    • 你很困惑BULK INSERT 是针对 SQL Server 而不是针对 MySQL 这是两个完全不同的数据库管理系统
    • 好的,感谢您的帮助 :) 解决了问题 1。关于第 2 部分的任何想法?
    • 脚本逻辑错误。如果您删除表,您将无法从 csv 文件加载数据。您必须先创建表。只有当你有 sql 转储文件而不是 cdv 文件时,这才有效。
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2012-04-05
    • 2012-12-24
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多