现在帮老师做的一个东西
涉及到数据导入
不想用EXCEL
准备用TXT
然后用load data infile 导入
但是问题在于
数据库中的表是
ID NAME ACADEMY
01 张三  03ID ACADEMY
03 外语系而导入的数据是
01 张三 外语系
就是数据库中字段对应的是另外一个表的外键
这种情况除了一个个判断外,还有什么别的方法么?
如果是判断的话也不知道该怎么写,TXT的数据是导入还是不导入?
希望指点一点

解决方案 »

  1.   

    方法是有很多的,给你几个:
    一:把你的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;
    方法是很多的,可以再自己想想还有没有。
      

  2.   

    如果是外键,则比较麻烦,建议还是先load到一个临时过渡表temp,然后从这个temp先 select distinct ACADEMY into department where ACADEMY not in (select id from department)
    然后再insert into student select * from temp;
      

  3.   

    第一种不实际哈,对我自己无所谓,对客户你不能要求他先去查数据库的字段对应的ID吧
    第二种也太过于繁琐,不灵活,类似于ACADEMY这样的外键至少有三个,如果要导入多个表更麻烦
    第三种看似可以,但是我ACADEMY是不可能用VARCHAR(30)去定义的,毕竟只是一个外键的ID
    2楼临时表的方法可以试一试
    我自己考虑的方法就是只导入ID 和NAME 2个字段,然后做个程序让每个具体的用户去选择自己的ACADEMY(比如外语系)