您好,我有一个适用于 Cantons 的 Mysql 表(瑞士我们在这里没有说明它的州)我已经将所有 Cantons 加载到我的表中(来自瑞士邮政服务的本地数据文件)。现在我想填写城市表(同样来自瑞士邮政服务的本地数据输入文件)。问题是我必须从广州获得 FK。
城市档案确实有州首字母,例如:“VS”,并且在州中保存为 PK、名称、首字母(例如:1、“Wallis”、“VS”)。
如果我想填写新表,我必须从 Canton 获得 FK 并提供该信息。我不希望 city 表中的首字母行。
表:
CREATE TABLE tbl_canton (
PK_canton INT NOT NULL AUTO_INCREMENT,
canton_name VARCHAR(45) NOT NULL,
canton_initiales VARCHAR(2) NOT NULL,
PRIMARY KEY (PK_canton)
);
CREATE TABLE tbl_city (
PK_city INT NOT NULL AUTO_INCREMENT,
city_name VARCHAR(45) NOT NULL,
city_zipcode INT NOT NULL,
FK_canton INT NOT NULL,
PRIMARY KEY (PK_city),
FOREIGN KEY (FK_canton) REFERENCES db_eventengine.tbl_canton (PK_canton)
);
我试过了:
LOAD DATA LOCAL INFILE 'c:/temp/tbl_city.csv' INTO TABLE tbl_city FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
(PK_city, city_name, city_zipcode, @cantoninit)
SET FK_canton = (SELECT PK_canton FROM tbl_canton WHERE @cantoninit = canton_initiales);
但它会先填充@cantoninit,然后在加载所有内容后开始设置FK。我可以告诉 MySql 在每一行之后都这样做还是之后我该如何处理?
答案/已解决:
感谢丹尼斯指出更新。我现在用一个临时表来做:
DROP TABLE IF EXISTS tbl_temp;
CREATE TABLE tbl_temp (
temp_PK_city INT NOT NULL AUTO_INCREMENT,
temp_city_name VARCHAR(45) NOT NULL,
temp_city_zipcode INT NOT NULL,
temp_FK_canton VARCHAR(2),
PRIMARY KEY (temp_PK_city)
);
DELETE FROM tbl_temp;
LOAD DATA LOCAL INFILE 'c:/temp/tbl_city.csv' INTO TABLE tbl_temp FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
(temp_PK_city, temp_city_name, temp_city_zipcode, temp_FK_canton);
INSERT INTO tbl_city (city_name, city_zipcode, FK_canton)
SELECT temp_city_name, temp_city_zipcode, tbl_canton.PK_canton
FROM tbl_temp, tbl_canton
WHERE temp_FK_canton = tbl_canton.canton_initiales;
DROP TABLE tbl_temp;