MySQL有个估计是为性能而设计成这样的地方:即当update语句所设定的值和原值一样的时候,update不会更新该行数据,也就是会出现“影响的行数为0”这一状况,而sqlserver和oracle的update,无论值和原值是否相同,只要update设置的值不违背数据表的值类型和范围,就会得到执行。实际开发中,有很多外部库访问mysql需要用“影响的行数大于0”这一点来判断操作数据库是否成功了,但是MySQL这种明明成功了但是返回值为0这一特性极其蛋疼,难道非要在update之前先用一次SELECT语句来检测match吗?这就反而降低了效率,难道就没有办法强制命令MySQL执行update吗?

解决方案 »

  1.   

    之前有个帖子应该是差不多这个思想内容吧!“update不会更新该行数据,也就是会出现“影响的行数为0”这一状况,而sqlserver和oracle的update,无论值和原值是否相同,只要update设置的值不违背数据表的值类型和范围,就会得到执行。”
    你现在就是存在这种情况?
    但是是不是还会出现 你update的数据不存在,所以返回的行数是0.那这种情况你怎么解决或者怎么定性啊!
      

  2.   

    update的数据不存在,返回的行数为0这一点无论mysql,mssql,oracle都是一样的,这个无需关心,这个东西的核心问题其实是很多时候我们要求sql执行后返回的其实是match(检测到满足条件的行),而不是appect(真正被影响的行)
      

  3.   

    update的数据不存在,返回的行数为0这一点无论mysql,mssql,oracle都是一样的,这个无需关心,这个东西的核心问题其实是很多时候我们要求sql执行后返回的其实是match(检测到满足条件的行),而不是appect(真正被影响的行)受影响的行数>0,update操作才算是真正成功的。即有多少行成功的更新了。
    如果=0, 则没有匹配的行。其它的,如果update操作失败,则会通过mysql_error得到错误消息,是另外一回事。
    你碰到了反例?还是没有适当的错误处理?