我们经常使用LOAD DATA的方式批量向数据库灌数据,如果在mysql外又想使用脚本的话,我们可以借助mysqlimport,具体使用方法网上有很多这里不再赘述。下面我们来看一个带自增长字段属性的表,是如何使用mysqlimport导入的。

我的MySQL-PerconaServer

表结构

SQL_MODE

表最初数据

注意:在该SQL_MODE下,指定自增长列为0的作用是生成下一序列号,而并非赋值操作。

文本文件1

文本文件2

文本文件3

注意:

1.我们在INSERT的时候处理首字段的方式是VALUES('','aaa',3);

2.文件文件中的字段也同样要求一一对应,首字段可不填充内容保持在分隔符前第一位,或者将null填充进去(虽然我们的主键约束的是NOT NULL,在这里也是支持的),文本内容使用以上两种方式均可导入。

导入成功

导入结果

1为INSERT语句插入,2~4为文本文件1的导入,5~7为文本文件2的导入,8~10为文本文件3的导入

------------------------------------------------------------------------------------------

补充:在SQL_MODE为空时,以上导入没问题任何问题,但是当我们使用了严格模式,就需要特别注意。

SQL_MODE

官方手册:由于NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL或0生成下一个序列号。NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。

初始化数据

mysql>环境下插入数据

我们可以看到除了初始化的第一条可以使用0,其次只能使用null来创建下一个序列号(你也可以手动赋予未生成的数值),其他均报错,那么在使用mysqlimport导入的时候是否也是这样,我们来看下面的测试。

清除表

文本文件1

文本文件2

文本文件3

导入都失败,同一个错误:1062主键重复

我们初始化下t3表,填充id为0的记录,再导入文本文件2

导入失败,报错同上。

结论:在SQL_MODE默认的情况下mysql命令环境下都是可以插入数据的,mysqlimport的工作也比较满意;当修改SQL_MODE后,mysqlimport的工作就不能完全支持了。那么在批量导数据之前,我们最好先检查下SQL_MODE的设置,避免走不必要的弯路。