如何使用外键将.xls文件导入.sql

Ste*_*eve 16 php mysql sql excel

我有一个excel电子表格:

id name  region  zone  
1  pokin Polon   Riny
2  lucy  yerni   kinta
...
Run Code Online (Sandbox Code Playgroud)

我在mysql数据库中有表,region_idzone_id不是在区域和区域中作为id的外键.

用户表:

id name region_id zone_id
1  retre  1        1
...
Run Code Online (Sandbox Code Playgroud)

区域表:

id region_name
1   Polon
...
Run Code Online (Sandbox Code Playgroud)

区域表

id zone_name
1   kinta
...
Run Code Online (Sandbox Code Playgroud)

我需要将excel电子表格导入到users表中.

Ric*_*mes 11

  1. 在电子表格中显示时导出表格(带有拼写的名称).
  2. 把它导入MySQL - X比如表.
  3. 在创建所需表时执行以下查询以执行"规范化"(使用数字而不是名称):

像这样的东西:

INSERT INTO users
        (id, name, region_id, zone_id)
    SELECT X.id, X.name, r.id, z.id
        FROM X
        LEFT JOIN region AS r ON r.region_name = X.region
        LEFT JOIN zone   AS z ON z.zone_name   = X.zone;
Run Code Online (Sandbox Code Playgroud)

如果idAUTO_INCREMENT,那么你可能想要略有不同.(留id出的INSERTSELECT.)

我用过LEFT以防丢失的区域或划分区域.在这种情况下,你会得到NULLs或默认值region_idzone_id,从而表明有什么需要固定.


llo*_*ono 3

我建议在您的 .xls 表中,将区域和区域名称替换为数据库中这些字段的实际 ID。然后,您可以将 xls 文件导出到 csv 文件,然后使用mysqlimport轻松将其导入到数据库中

mysqlimport --ignore-lines=1 \
        --fields-terminated-by=, \
        --local -u root \
        -p DatabaseName \
         YourExportedFile.csv
Run Code Online (Sandbox Code Playgroud)

这里需要考虑一些事情:

  1. 执行命令时文件的路径。
  2. 字段终止字符
  3. “-p DatabaseName”,DatabaseName不是密码,是你的数据库名,执行命令时会提示输入密码。

您可以使用LOAD DATA INFILE通过 SQL 语句导入 CSV 文件

LOAD DATA INFILE "/home/user/YourExportedFile.csv"
INTO TABLE YOUR_TABLE
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用任何图形 MySQL 客户端(mysql workbench、heideSql、mysqlpro 等),您可以使用导入功能。

  • @Steve——大约需要 4 个 SQL 语句,没有循环,没有手动工作:“CREATE TABLE 映射... SELECT DISTINCT zone ...”,然后添加一个 id 列,“UPDATE real JOIN 映射 ON ... SET real”。 id = 映射.id,其中 real.zone = 映射.zone`。然后是“删除列区域”。如果您愿意,我们可以讨论如何处理后续的“LOAD”。 (2认同)