基于外键选择加载数据本地Infile

时间:2018-06-11 14:44:46

标签: mysql file foreign-keys mariadb

我希望根据本地数据文件中的外键查找将数据插入表中,但我不确定语法。我有一个单词列表:

jamba
fire
street
road

在我希望使用

插入表格的文件中
LOAD DATA LOCAL INFILE '$PATH'
    INTO TABLE b1 
    FIELDS TERMINATED BY '\n' 
    (SELECT id FROM dictionary
     WHERE dictionary.word='word-from-file');

更好地描述项目:我正在尝试从字典创建一个外键表来布局书籍,比如使用词典条目号而不是单词来订购书。

那就是:句子The quick brown fox jumped over the lazy dog在表格中会1024 891 26 51 75 521 1024 762 1024 641 45(完全猜测),但每个数字都是字典中单词的id号。

第一个表格是字典:

Field    Type
id       word
word     varchar(128)

第二张表是书,b1:

Field    Type
pos      int   #Position of the word, essentially an id
wid      int   #A foreign key corresponding to a dictionary.word

案例敏感性至关重要。不要和别人说两个不同的词。

基本上我正在尝试执行@revo中此SO答案中解释的操作: Insert mysql on foreign key id php但使用本地数据文件中的字段而不是单独的表。

注意:区分大小写很重要!我已经根据

定义了字典单词字段
CHARACTER SET utf8 COLLATE utf8_bin

2 个答案:

答案 0 :(得分:1)

您可以使用SET子句。还要处理行终止符(Windows OS中的\r\n):

LOAD DATA LOCAL INFILE 'path-to-file' 
INTO TABLE `b1`
LINES TERMINATED BY '\n'
(@word)
SET `wid` = (SELECT `id` FROM `DICTINARY` `d` WHERE BINARY `d`.`word` = @word);

答案 1 :(得分:0)

  1. LOAD将新列表添加到一个额外的表格中,该表格中包含额外的ID列,默认为NULL
  2. INSERT .. SELECT .. WHERE .. NULL将任何新单词插入字典。
  3. 执行多表UPDATE以撤回所有单词的ID。这将进入额外的专栏。
  4. 继续做您需要做的其他事情 - 例如将数据(使用id而不是word)复制到其他表格中。
  5. 我会详细介绍here

    同时,请务必在COLLATION列中存在的任何表格中使用相同的utf8_bin(例如word

    对于您的应用程序来说应该非常快如果整理匹配字典在word上有索引。

    不匹配的归类导致不使用索引,这将非常慢。