此写法数据文件内字段数必须跟数据库表一致
load data local infile "C:\test.txt" into table tableName CHARACTER SET gbk fields terminated by '|' LINES TERMINATED by 'n';
在生产环境中推荐使用自定义列导入,这样如果是不需要的字段,就可以不接这个字段内容,这样就不必改表结构。还可以做成数据库配置等进行维护。
//不需要的列直接用@过滤掉就可以了(可以使用同一个变量名比如@a,或者使用我下面不同的变量名加上@符号) //不需要的列的列名可以随便定义,但是没有加@符的需要跟数据库表字段名一一对应。 // 不需要的列也需要跟数据文件中的字段一一对应,类似于占个坑,但是不进行数据绑定。 load data local infile "C:\test.txt" into table tableName CHARACTER SET gbk fields terminated by '|' LINES TERMINATED by 'n' (c1,@2,c3,@4, c5,@6,c7,@8,c9,@10); // set命令可以设置默认值,可以直接赋值, 也可以使用if判断,跟update 差不多。 load data local infile "C:\test.txt" into table tableName CHARACTER SET gbk fields terminated by '|' LINES TERMINATED by 'n' (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) set c1 = '1', c9=if(c9='0000-00-00',now(),c9)
1|test|3|tmp|5 6|string|8|a|10
infile "C:\test.txt" // 这是你的数据文件存放的位置 最好使用双引号和使用转义符进行路径转义 into table tableName // 这是你数据库的表名 CHARACTER SET gbk // 这是以什么字符编码读取你的数据文件,当你的文件和数据库不对应的时候需要设置(对应的话就不需要)。当你的数据文件是gbk的时候你需要设置成gbk。 fields terminated by '|' // 这个是你的数据文件字段是以什么方式进行分割的。这个是以竖线分割 LINES TERMINATED by 'n' // 这个是你的数据文件一条数据是以什么方式区分的。这里是以换行进行区分的。 (c1,c2,c3,c4,c5,c6,c7,c8,c9,@c10) // 指定列导入,跟数据库表字段对应,不需要的列加@符占个坑位。不需要的列名可随便定义,需要的列名跟数据库字段对应。 set c1 = '1', c9=if(c9='0000-00-00',now(),c9) // 给导入的数据设置值,这里判断的值是导入后的值,比如这个例子是当一个时间类型的数据时在数据文件里是个空的时候导入到表中对应是个0000-00-00 而不是null。所以这里要用0000-00-00,而不是""。