这里不会长篇大论数据导入的策略以及他们的优劣; 假设您已经有过数据导入经历!
1 涉及的导入策略:
insert;
mysqlimport <---> mysqldump ;
load data infile <---> select into outfile;
source ;
mysql -e ; mysql <sql-script.sql .
2 有时我们只要直接使用insert语句就可以完成我们的任务,那么根本就不用考虑其他的方式了;我们的目标从来都是以最简便快捷的方式解决问题! 在使用insert时,你可能习惯于:
insert into table-name values(.....); insert into table-name values(.....); insert into table-name values(.....);
实际上,你完全可以这样:
insert into table-name values(.....),(......),(......);
虽然我们不过分追求几行数据的效率,但是,我们应该知道这种技巧!
3 mysqlimport 命令,比较适合于在命令行完成新建数据库的数据初始化;或者是数据迁移中的类似问题等。
需要注意的有一点: 被导入数据文件的权限以及位置!
权限: 必须要是mysqlimport可读,当前执行mysqlimport的用户可读;
位置:如果和mysql server位于同一服务器,那么你要注意使用相对和绝对路径的区别;
如果是位于mysql server之外的服务器上,那么你最好使用 mysqlimport的 --local选项,而且要注意是长选项符哦 “--” ! 部分朋友为了避免权限问题,习惯将被导入的数据文件置于 /tmp 下,笔者觉得这不是一个好方法;因为系统的/tmp是一个特殊的被大家共同使用的目录,而且不是大家都会主动去清理自己的垃圾文件; 如果你是在mysql server之外的服务器上mysqlimport ,而且忽略了--local选项,那么你很可能是导入了mysql server的 /tmp目录的同名文件里的数据,而且很有可能那是你或者你的同事上次使用的数据文件;这样以来你就很难发现除了问题,而且就算发现了数据本身的问题,也一时很难找到问题的原因! 所以,再此建议使用--local选项,并且明确指定你的数据文件位置!
4 load data infile : 一样有 local选项 ,比如 load data local infile "file-name" into table table-name;
如果是在mysql server之外的服务器,同样建议使用local选项;除非你就是要从该机器上导入mysql server上的 “file-name” 文件!
5 如果你将insert语句写入sql script,或者你希望在shell脚本等环境里执行数据导入的语句,而不希望在命令行登录mysql再使用insert , source等命令时; 你可以使用 mysql -e 命令及选项,或者mysql <sql-script.sql;这些也许是一个mysql DBA每天都在重复敲的字符串,当然聪明的DBA可能已经把别名为"sqlexe"等 。。。
6 关于被导入数据文件的格式:
你一定要知道你所拥有版本的mysql,默认以tab为列分割符;当然你可以改变为逗号或者其他;行结束符也一样可以修改;
另外一个技巧是:如果你不希望在原始数据中生成ID,因为该字段是自增的代理主键,那么你只要在该列的位置什么都不写,前后的tab(分割符)连接在一起就可以了;或者你的某些允许为空的列,也可以采用同样的办法;甚至你的最后的几列都为空时,你干脆不写!
OVER!