轉自:http://longxzq-126-com.iteye.com/blog/586694
在Mysql中ROW_COUNT()返回前一个SQL进行UPDATE,DELETE,INSERT操作所影响的行数。
下面通过一个更新的例子来说明:
MySQL上的测试(数据库版本为:5.1.22):
1.创建数据库表:
create table t(
id int,
name varchar(50),
address varchar(100),
primary key(id,name)
)engine =InnoDB;
2.插入测试数据:
insert into t
(id,name,address)
values
(1,'yubowei','weifang'),
(2,'sam','qingdao');
3.更新:
update t set address = 'weifang'
where id = 1 and name = 'yubowei';
此时查看影响的行数:
select row_count(); ==〉执行结果为0;
4.再更新:
update t set address = 'beijing'
where id = 1 and name = 'yubowei';
此时查看影响的行数:
select row_count(); ==〉执行结果为1;
从上面的测试可以得出在MySQL中只有真正对记录进行修改了的情况下,row_count才会去记录影响的行数,否则如果记录存在但是没有实际修改则不会将该次更新记录到row_count中。
在Mysql中ROW_COUNT()返回前一个SQL进行UPDATE,DELETE,INSERT操作所影响的行数,與php中的mysql_affected_rows()效果一致.
我们一般用 COUNT() 或者 mysql_num_rows() 来获取查询的行数;
在MySQL4,5里面,有 SQL_CALC_FOUND_ROWS 可以在查询的同时,计算行数:
$query = "SELECT SQL_CALC_FOUND_ROWS * FROM title WHERE ID >1000 LIMIT 10;";
$result = $db->query($query);
$line = $db->fetch_row($db->query("SELECT FOUND_ROWS();"));
print_r($line);
此时,不用额外的查询,即可得到
SELECT count(id) FROM tabled WHERE id>1000;
这样子的结果了。
不过,http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#limit-optimization 说:
只要MySQL已经发送了需要的行数到客户,它将放弃查询,除非你正使用SQL_CALC_FOUND_ROWS。