【问题标题】:Importing CSV to MySQL while looking up foreign key在查找外键时将 CSV 导入 MySQL
【发布时间】:2014-06-25 16:56:43
【问题描述】:

请原谅我的示例中的任何语法错误;我是 SQL 新手。 对于这个问题,让我们假设我有这样的假设结构:

作者列表:

  • author_id INT NOT_NULL AUTO_INCREMENT PRIMARY
  • author_name VARCHAR(30) NOT_NULL

books_list:

  • book_id INT NOT_NULL AUTO_INCREMENT PRIMARY
  • book_author_id INT NOT_NULL FOREIGN_KEY(authors_list.author_id)
  • book_name VARCHAR(30) NOT_NULL

一般导入书籍时,我只知道书名和作者名。我终于弄清楚了如何仅使用以下数据插入books_list:

INSERT INTO `books_list`(`book_author_id`, `book_name`) VALUES ((SELECT `author_id` FROM `authors_list` WHERE `author_name` = 'SomeAuthorName'), 'SomeBookName')

但是,我有一个 .csv 文件,其中仅包含 author_name 和 book_name 列。我之前一直在使用 phpMyAdmin 导入 .csv 文件,但这些表没有外键。有什么方法可以导入使用此“动态查找”功能描述的表单的 .csv?

【问题讨论】:

  • @Fanda 这会是 SQL 语句还是 PHP 之类的东西?目前,我一直将 .csv 导入 Excel 并在作者表的本地副本上执行 VLOOKUP 以获得id - 似乎您建议的过程需要大约相同的时间?

标签: mysql sql phpmyadmin


【解决方案1】:

可以直接使用SQL:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

如果您需要更多的逻辑而不是 id 生成,您可以将数据导入另一个表,然后使用您自定义的逻辑编写脚本或过程将该表中的数据复制到 books_list。

如果我们的步骤有效,请使用它。数据量可能会有限制。如果达到限制,请使用建议的方式。

【讨论】:

  • 我最终创建了一个与我的 CSV 结构相同的 books_inserter 表,然后在其上编写了一个触发器,该触发器将执行所需的查找并将数据插入到 books_list 中。可能不是最有效的方法,到目前为止,我必须在一段时间后手动清除 books_inserter 表,但它可以完成工作。感谢您为我指明正确的方向! (我还没有足够的代表 +1 你,但意图就在那里!)
  • 您可以(应该)使用“标记为答案”。这是如何使用本网站的正确方法。
猜你喜欢
  • 2021-01-01
  • 2011-03-02
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多