你好,我有一个关于各州的Mysql表(瑞士,我们这里没有州的州) 我把所有的部分加载到我的表中(来自瑞士邮政服务的本地数据)。 现在我想填写城市表(再次来自瑞士邮政服务的本地数据信息)。问题是我必须从广州获得FK。
城市文件确实有首字母缩写:“VS”,在广州,它保存为PK,姓名,缩写(例如:1,“Wallis”,“VS”)。
如果我想填写新表,我必须从广州获得FK的信息。我不想在城市表中使用initiales行。
表:
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在每一行之后做什么,或者我怎么能在之后处理它?</ p>
答案/已解决:
感谢Denis指向更新。 我现在用临时表来做这件事:
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;
答案 0 :(得分:0)
删除外键,使用FK_canton nullable加载数据并设置为null,更新表以在一个语句中设置fkey,然后重新添加外键。