分页查询通常都会出现俩次查询,此时会有以下状况:html
若是在第一个查询和第二个查询之间新增或者删除了一些数据,那么查询的结果就不许备了。我想你们都能想象这个场景,在此就不举例。mysql
有什么解决方法,不会出现上述的问题,通过一番搜索,发现MySQL能够使用sql
List-1spa
ELECT FOUND_ROWS();
咱们来验证下:code
List-2 获得7条记录orm
mysql> select * from student where id>5; +----+-------+------+ | id | name | age | +----+-------+------+ | 8 | ?? | 20 | | 9 | ?? | 20 | | 10 | ?? | 20 | | 11 | ?? | 20 | | 12 | ?? | 20 | | 13 | Jack | 16 | | 14 | Alice | 16 | +----+-------+------+ 7 rows in set (0.00 sec)
List-3 插入一条记录,此时知足List-2条件的记录是8了htm
mysql> insert into student(name,age) values('Wenlian',25); Query OK, 1 row affected (0.01 sec)
List-4 获得的是7,而不是8blog
mysql> select found_rows(); +--------------+ | found_rows() | +--------------+ | 7 | +--------------+ 1 row in set (0.01 sec)
咱们explain来查看下"select found_rows();"文档
List-5 type值是null,表示不须要去查询tableget
mysql> explain select found_rows(); +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+ | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used | +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+ 1 row in set, 1 warning (0.00 sec)
来验证下删除的状况
List-6 知足条件的有5条
mysql> select * from student where age=16; +----+---------+------+ | id | name | age | +----+---------+------+ | 1 | ?? | 16 | | 2 | Steven | 16 | | 3 | Han | 16 | | 4 | Meituan | 16 | | 13 | Jack | 16 | +----+---------+------+ 5 rows in set (0.00 sec)
List-7 删除一条知足List-6条件的记录
mysql> delete from student where id=1; Query OK, 1 row affected (0.00 sec)
List-8 即便List-7中删除了一条知足条件的记录,结果仍是5
mysql> SELECT FOUND_ROWS(); +--------------+ | FOUND_ROWS() | +--------------+ | 5 | +--------------+ 1 row in set (0.01 sec)
这里就再也不给出具体例子,看MySQL官网文档,上面有具体描述。