现在帮老师做的一个东西
涉及到数据导入
不想用EXCEL
准备用TXT
然后用load data infile 导入
但是问题在于
数据库中的表是
ID NAME ACADEMY
01 张三 03ID ACADEMY
03 外语系而导入的数据是
01 张三 外语系
就是数据库中字段对应的是另外一个表的外键
这种情况除了一个个判断外,还有什么别的方法么?
如果是判断的话也不知道该怎么写,TXT的数据是导入还是不导入?
希望指点一点
涉及到数据导入
不想用EXCEL
准备用TXT
然后用load data infile 导入
但是问题在于
数据库中的表是
ID NAME ACADEMY
01 张三 03ID ACADEMY
03 外语系而导入的数据是
01 张三 外语系
就是数据库中字段对应的是另外一个表的外键
这种情况除了一个个判断外,还有什么别的方法么?
如果是判断的话也不知道该怎么写,TXT的数据是导入还是不导入?
希望指点一点
一:把你的TXT文件进行修改,来个全部替换,将所有的外语系替换为03,其它系替换为相应的系的ID。用全部查找并替换是很快的。
二:用程序来实现,写个程序,读取你的TXT,每读一行就解析一行,将最后一行替换为系的id,再插入数据库,类似于第一种。
三:将你的TXT文档全部原样导入数据库,然后写一个存储过程,把数据表中的 ACADEMY 字段修改为对应的系id,
这样有一个前提,就是把你的表的 ACADEMY 字段建立成为CHAR(30)型的,待数据都导入并都用存储过程修改完后,再修改列的类型为int就可以了。
存储过程如下:
DELIMITER //
DROP PROCEDURE IF EXISTS replaceProc//
CREATE PROCEDURE replaceProc()
BEGIN
UPDATE (SELECT * FROM xiTableName a,tableName b WHERE a.ACADEMY=b.ACADEMY) tmp SET tmp.ID=b.ID;
END;
//
DELIMITER ;
修改表的列属性:
ALTER TABLE tableName MODIFY ACADEMY INT NOT NULL;
方法是很多的,可以再自己想想还有没有。
然后再insert into student select * from temp;
第二种也太过于繁琐,不灵活,类似于ACADEMY这样的外键至少有三个,如果要导入多个表更麻烦
第三种看似可以,但是我ACADEMY是不可能用VARCHAR(30)去定义的,毕竟只是一个外键的ID
2楼临时表的方法可以试一试
我自己考虑的方法就是只导入ID 和NAME 2个字段,然后做个程序让每个具体的用户去选择自己的ACADEMY(比如外语系)