请问MYSQL使用LOAD时如何跳过数据格式错误的行

wh62592855 2011-10-23 02:47:47
大家好,请问下MYSQL中使用LOAD功能的时候能不能跳过一些数据格式错误的行?
刚试了下,在使用MYSQL的LOAD语句时,哪怕数据文件中部分行的格式错误的话也会LOAD进去,只是报个WARNING而已。有没有什么参数指定如果数据行格式错误就跳过呢?
...全文
787 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh62592855 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rucypli 的回复:]

试试set global sql_mode=traditional;
[/Quote]mysql> set session sql_mode=traditional;
Query OK, 0 rows affected (0.00 sec)

mysql> set global sql_mode=traditional;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from aa;
Query OK, 3 rows affected (0.00 sec)

mysql> load data local infile '/home/wanghai01/data/customer_20111022.dat' into table aa fields terminated by',' lines terminated by'\n';
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 1

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1261 | Row 1 doesn't contain data for all columns |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from aa;
+------+------------+---------------------+
| id | name | ins_date |
+------+------------+---------------------+
| 11 | 2011-01-01 | NULL |
| 33 | xx | 2011-01-01 00:00:00 |
| 22 | hehe | 2011-01-01 00:00:00 |
+------+------------+---------------------+
3 rows in set (0.00 sec)

mysql>

谢谢回答,结果还是不行。
rucypli 2011-10-23
  • 打赏
  • 举报
回复
试试set global sql_mode=traditional;
rucypli 2011-10-23
  • 打赏
  • 举报
回复
TRADITIONAL

Make MySQL的行为象“传统”SQL数据库系统。该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。注释:一旦发现错误立即放弃INSERT/UPDATE。
wh62592855 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nicenight 的回复:]

要不换个思路,导入完后把格式不对的数据找出来删除掉?
[/Quote]可能不太好定位那些错误的数据。
更重要的一点是,一般业务上有完整性的要求,也就是说,要么没有数据,要么数据就是一份正确的全量。不能说只把正确的那部分数据导入进去。
nicenight 2011-10-23
  • 打赏
  • 举报
回复
要不换个思路,导入完后把格式不对的数据找出来删除掉?
wh62592855 2011-10-23
  • 打赏
  • 举报
回复
依然是报WARNINGS,而不是ERROR。并且也插入了3行数据,只不过那两行缺列的内容为NULL。
wh62592855 2011-10-23
  • 打赏
  • 举报
回复
刚才试了下通过SQL_MODE来控制,发现还是不行。跟文档上描述的有出入,不知道是不是版本问题
mysql> select @@session.sql_mode;
+----------------------------------------------------------------+
| @@session.sql_mode |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> load data local infile '/home/wanghai01/data/customer_20111022.dat' into table aa fields terminated by',' lines terminated by'\n';
Query OK, 3 rows affected, 2 warnings (0.01 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 1

mysql>
mysql> select version();
+------------+
| version() |
+------------+
| 5.1.45-log |
+------------+
1 row in set (0.01 sec)

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧