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

chhqkbe1  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(296)

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

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 在table上 1024 891 26 51 75 521 1024 762 1024 641 45 (完全是猜测)但每个数字都是字典中一个单词的id号。
第一个表是字典:

Field    Type
id       word
word     varchar(128)

第二张table是书b1:

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

区分大小写很重要。不要和不要是两个不同的词。
本质上,我是在尝试执行@revo:insert mysql on foreign key id php的so answer中解释的操作,但是使用本地数据文件中的字段,而不是单独的表。
注意:区分大小写很重要!我已经根据定义了dictionary单词字段

CHARACTER SET utf8 COLLATE utf8_bin
bksxznpy

bksxznpy1#

你需要一个 SET 条款。还要注意线路终端( \r\n 在windows操作系统中):

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);
agyaoht7

agyaoht72#

LOAD 将新列表添加到一个额外的表中,该表的id有一个额外的列,默认为 NULL . INSERT .. SELECT .. WHERE .. NULL 把生词插入词典。
做一个多表 UPDATE 把所有单词的ID都取出来。这个进入额外的一栏。
继续做任何你需要做的事情——比如复制数据(使用 id 而不是 word )换张table。
我在这里更详细地讲。
同时,一定要有相同的 COLLATION (例如, utf8_bin )在 word 列存在于任何表中。
如果排序规则匹配并且字典有一个索引,那么对于应用程序来说应该是相当快的 word .
不匹配的排序规则会导致不使用索引,这将非常慢。

相关问题