您的位置:首页 > 数据库 > MySQL

使用mysqlimport导入包含主键自增长属性的表

2012-08-23 15:49 369 查看
我们经常使用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的设置,避免走不必要的弯路。
本文出自 “喀秋莎的技术积累” 博客,请务必保留此出处http://mckobe23.blog.51cto.com/826570/971185
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐