这次就不说很多没有写博客了,因为前几天已经写过了。\^o^/

昨天我们刚讨论了关于自动化运维工作的实现方式,如果批量执行,中间出错怎么办?突然有人提出mysql支持--force,可以跳过出错继续执行。

那么我就想看看它这个功能是什么样子的,看看我能不能借鉴一下。

然后我就在一个测试机器上写入如下命令:

mysql -h127.0.0.1 -P3307 -uwzf -pxxxxxxx mysql --force -e "insert into myinfo (1,'asdf');insert into myinfo values(1,'asdf');

然后报错:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

看上去是正确的,因为第一条是有语法错误,但第二条是正确的,这个表应该多一条数据,但查了几遍都是没有,那说明根本就没有执行,为什么?不是说可以跳过么?

我换一种方法,将上面的语句放到一个sql文件中,因为考虑到这只有是在batch批量执行的时候才出现的,放到文件中肯定是批量的吧?然后执行下面的语句:

mysql -h127.0.0.1 -P3307 -uwzf -pxxxxxxx mysql --force -e "source sql"

结果和上面是一样的,报错依旧,数据没有插入依旧!为什么?

然后又换了一种方式:

mysql -h127.0.0.1 -P3307 -uwzf -pxxxxxxx mysql --force < sql

啊?用这种方式,报错依旧,查了一次表,发现好像多了一条?为什么这样可以执行成功,通过-e方式指定就不能?

不行,我得看看代码

对于--force的参数解析,它将全局变量ignore_errors设置为1,表示忽略所有的错误。

发现对-e的解析是下面的代码:

case 'e':

status.batch= 1;

status.add_to_history= 0;

if (!status.line_buff)

ignore_errors= 0; // do it for the first -e only

if (!(status.line_buff= batch_readline_command(status.line_buff, argument)))

return 1;

break;

这里可以看到,处理-e时可能会将变量ignore_errors设置为0,这是在status.line_buff=NULL的情况下,但看了一下代码,如果有-e,则蓝色字体是设置status.line_buff的最早位置,那说明上面的ignore_errors肯定会被设置为0啊!!!

这么说来,我在命令中必须要将--force放到-e后面去?将上面出错的命令中--force放在-e后面重试一下?

mysql -h127.0.0.1 -P3307 -uwzf -pxxxxxxx mysql -e "insert into myinfo (1,'asdf');insert into myinfo values(1,'asdf'); --force

mysql -h127.0.0.1 -P3307 -uwzf -pxxxxxxx mysql -e "source sql" --force

此时执行发错,报错依旧,但正确的插入语句执行成功了!!!难道这是个bug?

突然又想到,这是不是故意这样子,而我才疏学浅不知道?那我看看文档怎么写的:

• --execute=statement [237], -e statement

Execute the statement and quit. The default output format is like that produced with --

batch [235]. See Section 4.2.3.1, “Using Options on the Command Line”, for some examples.

With this option, mysql does not use the history file.

• --force [237], -f

Continue even if an SQL error occurs.

这完全没有说啊!!

随便提一个改法啊,这是随便提的,没有深入研究,别批我就好了

if (!status.line_buff)

ignore_errors= 0; // do it for the first -e only

if (!(status.line_buff= batch_readline_command(status.line_buff, argument)))

return 1;

将上面4行中的前面2行放到后面2行之后去,换一下位置,这样先初始化status.line_buff就不会出现这个问题了。

mysql代码的bug还是比较多的。

mysql ignore errors_mysql的又一个让人捉摸不透的bug?相关推荐

  1. mysql ignore用法_php – 在某些条件下在一列上使用MySQL IGNORE

    我想将Gmail中的记录导入表格,我不需要为每个帐户重复. 描述: 我有一个名为list的表,其定义如下: id int(11), account_id int(11), email varchar( ...

  2. 一个牛人给Java初学者的建议(必看篇)

    给初学者之一:浅谈Java及应用学java 从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡bbs逛论坛,没少去java相关的版 面总体感觉初学者 ...

  3. 在MySQL中如何有效的删除一个大表?

    在MySQL中如何有效的删除一个大表? Oracle大表的删除: http://blog.itpub.net/26736162/viewspace-2141248/ 在DROP TABLE 过程中,所 ...

  4. mysql ignore into语法

    mysql ignore into 该语法是mysql中可以实现类似一个插入时不存在则插入,存在则不做插入的语法(说类似的原因等会解释) 该SQL的使用主要是为了避免重复数据需要先查询一次库,根据返回 ...

  5. 一个牛人给java初学者的建议(很有意义,转载的)

    一个牛人给java初学者的建议(很有意义,转载的) 给初学者之一:浅谈java及应用 学java不知不觉也已经三年了 从不知java为何物到现在一个小小的j2ee项目经理 虽说不上此道高手,大概也算有 ...

  6. 介绍一个懒人创建springmvc项目的方法(二)

    PS: 我是一个懒人,我懒得搭建项目连pom都不想去找,连web.xml都不想配置.所以就会想着找一些简便的办法,来适应我这种懒人. ---------------------------- 本人介绍 ...

  7. mysql div 没有小数,mysql order by limit 的一个坑

    mysql order by limit 的一个坑 分页查询的时候遇到的坑: 发现的问题: 对单个无索引的字段进行排序后limit .发现当被排序字段有相同值时并且在limit范围内,取的值并不是正常 ...

  8. 一个浙江人的23条经典经商法则

    一个浙江人的23条经典经商法则 1.坚持看CCTV-1新闻联播.  要想把握经济命脉,必须关注政局,新闻联播图文并茂,有声有色,着实为中国商人的最佳晴雨表.  2.不要轻易相信合约或合同  哪怕合约让 ...

  9. linux c mysql 封装_本人对MYSQL C API做的一个封装,希望对linux C++程序员有点帮助,同时欢迎拍砖!...

    本人对MYSQL  C API做的一个封装,使用很简单,构造一个对象,就可直接执行SQL,但对于需返回结果的查询语句,对其数据集没做封装,仍需直接调用mysql c api对其进行处理,本人将下次完成 ...

最新文章

  1. 虚函数表剖析,网上转的,呵呵
  2. redis发布与订阅消息
  3. Python从菜鸟到高手(4):导入Python模块
  4. python 取反_自从用了这招pandas 空数据处理方法,python编程速度提升了不少
  5. 0109互联网新闻 | 微信推智言对话系统“小微”,接入第三方生态;华为发布首款数据中心交换机...
  6. python 接口编程_Python 中的面向接口编程
  7. 14 代码分割之lazy:Suspense与路由懒加载
  8. C#窗体的Load事件与Shown事件的区别
  9. iphone 流媒体
  10. linux下的chromedriver驱动器配置实例(含代码)
  11. 管理感悟:你说负责,关键在于怎样负责?
  12. Atitit 命令行执行sql 跨语言 目录 1.1. 无需输入密码,那就不要-p参数即可 1 1.2. 4.使用mysql命令执行 1 1.3. 5.mysql命令执行sql,并将查询结果保存到
  13. java实例化全局变量_静态/全局变量的内存隔离(多实例化)
  14. 数字图像基本操作——图像采样、量化、算术运算、点运算实验结果及分析
  15. 迅雷精简版依托迅雷强大的P2P资源网络和独特的下载技术
  16. 原理 拉普拉斯金字塔_十三 高斯金字塔和拉普拉斯金字塔
  17. android商品上架功能实现,Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现...
  18. 如何撤回已发送的邮件?邮件撤回成功后对方还能看到吗
  19. UVa10158 War
  20. 互联网快讯:华为正式开启二手机业务;法院审理认定阿卡索赔猿辅导20万;极米高性能投影产品获用户青睐;谷歌Pixel 6 Pro首次放弃使用高通基带

热门文章

  1. 关于MX5在Mac无法正常使用开发者模式的解决方案
  2. Cannot determine the location of the VS Common Tools folder.
  3. 从C语言中的指针看C#中委托
  4. HDU1225 字符串
  5. 微信小程序保存图片fail Error: unable to verify the first certificate 微信小程序 当前系统代理不是安全代理,是信任问题解决
  6. Flutter进度条Flutter圆形进度条Flutter条形进度条Flutter Progress进度条LinearProgressIndicator
  7. Springboot06配制拦截器
  8. IOS启程06—iOS设置圆角图片
  9. 华为lab-rs-v1-2.9_OSPF区域34
  10. LeetCode14最长公共前缀