从其他地方拿到一些数据,形如:
INSERT INTO `alarm`(`id`,`ALARMKEY`,`ALARMNE`,`ALARMSOURCE`,`OPERATEOBJ`,`ALARMTYPEDEFINE`,`ALARMLEVEL`,`PATHNAME`,`SERVICEID`,`OCCURDATE`,`CLEARDATE`,`CLEARUSER`,`CONFIRMDATE`,`CONFIRMUSER`,`REMARK`,`ALARMCONFIRMTYPE`,`ALARMCLEARTYPE`,`ISSHIELD`,`FIRSTTIME`,`ALARMTIMES`)
VALUES ('2c9cc85244f8cdf20144fdaa693205e2', 'Mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'Y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1');
如果直接一条一条执行
1、不能直接导入到MySQL客户端,直接死掉
2、耗费PC巨大的时间、空间
将insert语句组织成一下:
INSERT INTO `alarm`(`id`,`ALARMKEY`,`ALARMNE`,`ALARMSOURCE`,`OPERATEOBJ`,`ALARMTYPEDEFINE`,`ALARMLEVEL`,`PATHNAME`,`SERVICEID`,`OCCURDATE`,`CLEARDATE`,`CLEARUSER`,`CONFIRMDATE`,`CONFIRMUSER`,`REMARK`,`ALARMCONFIRMTYPE`,`ALARMCLEARTYPE`,`ISSHIELD`,`FIRSTTIME`,`ALARMTIMES`)
VALUES ('2c9cc85244f8cdf20144fdaa693205e2', 'Mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'Y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'Mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'Y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'Mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'Y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'Mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'Y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1'), ('2c9cc85244f8cdf20144fdaa693205e2', 'Mismerge', '\\ne=8', '\\ne=8\\pw=33619973', 'Y1731', '1', '5', 'bfd666', '\\pwt=1097', '2014-03-31 17:13:27', null, null, null, null, null, '0', '0', '\0', '2014-03-31 17:13:27', '1');
==============================================================================================
还有一个办法,时间多个insert语句打包到一个事务里面:
START TRANSACTION;
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0);
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1);
...
COMMIT;
通过使用事务可以减少数据库执行插入语句时多次“创建事务,提交事务”的消耗,所有插入都在执行后才进行提交操作。这个方法参考了:http://blog.csdn.net/tigernorth/article/details/8094277,还未考证。
==============================================================================================
问题又来了,将几万条数据组织到一起,一个SQL语句规模还是很庞大,导入到MySQL,呃:
注意事项:
1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packe配置可以修改,默认是1M。
2. 事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会日志会使用磁盘数据,这时,效率会有所下降。所以比较好的做法是,在事务大小达到配置项数据级前进行事务提交。