大侠好,我在测试MySQL的update操作影响的行数时,发现怎么测试都是-1,感到疑惑与不解,在此请求大家的指点,谢谢。
SELECT VERSION(); -- 5.0.22-community-ntSET @@autocommit = 0;SELECT @@autocommit; -- 0CREATE TABLE t(  
  id INT,  
  NAME VARCHAR(50),  
  address VARCHAR(100),  
    PRIMARY KEY(id,NAME)  
) ENGINE =INNODB; 
INSERT INTO t  
  (id,NAME,address)  
VALUES  
  (1,'yubowei','weifang'),  
  (2,'sam','qingdao');  COMMIT;UPDATE t  
  SET address = 'weifang'  
WHERE id = 1  
  AND NAME = 'yubowei';  
  
SELECT ROW_COUNT(); -- -1UPDATE t  
  SET address = 'beijing'  
WHERE id = 1  
  AND NAME = 'yubowei'; 
  
SELECT ROW_COUNT(); -- -1
MySQLupdae row_countupdat row_count

解决方案 »

  1.   

     
    UPDATE t  
      SET address = 'weifang'  
    WHERE id = 1  
      AND NAME = 'yubowei';  
    COMMIT;   
    SELECT ROW_COUNT(); 
    结果如何
      

  2.   

    UPDATE t  
      SET address = 'weifang111'  
    WHERE id = 1  
      AND NAME = 'yubowei';  
    做个实际的更新看看,注意你原来的值'weifang'  和更新的值是相同的。
      

  3.   

    当值相同的时候,从MYSQL的源代码中可以看到,MYSQL不会再去更新数据库中的内容。
      

  4.   

    UPDATE t    
    SET address = 'beijing'  
    WHERE id = 1    
    AND NAME = 'yubowei';    SELECT ROW_COUNT(); -- -1实际更新时也是 -1 
      

  5.   

    建议楼主按如下贴出你的测试结果。mysql> UPDATE t
        -> SET address = 'beijing111'
        -> WHERE id = 1
        -> AND NAME = 'yubowei';
    Query OK, 1 row affected (0.30 sec)
    Rows matched: 1  Changed: 1  Warnings: 0mysql>
    mysql> SELECT ROW_COUNT();
    +-------------+
    | ROW_COUNT() |
    +-------------+
    |           1 |
    +-------------+
    1 row in set (0.00 sec)mysql>
      

  6.   

    多谢楼上的兄台,我是在SQLyog窗口测试的,不管怎么测试,结果都是-1;但是我把代码写在存储过程中,结果就正确了。另外在cmd命令行中运行,结果也是正确的。