信息函数 
=========================



FOUND_ROWS 
-------------------



**声明** 

`found_rows()`

**说明** 

一个SELECT语句可能包含一个LIMIT子句，用来限制数据库服务器端返回客户端的行数。在某些情况下，我们需要不再次运行该语句而得知在没有LIMIT时到底该语句返回了多少行。我们可以在SELECT语句中选择使用SQL_CALC_FOUND_ROWS, 然后调用FOUND_ROW()函数，获取该语句在没有LIMIT时返回的行数。

例如：

```javascript
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
```



第二个SELECT语句返回一个数字，表示在没有LIMIT子句的情况下，第一个SELECT语句返回了多少行。（若上述的SELECT语句在不使用SQL_CALC_FOUND_ROWS选项时，使用LIMIT和不使用LIMIT时候， FOUND_ROWS()可能会返回不同的结果）。

通过FOUND_ROWS()函数返回的有效行数是瞬时的，并且不能越过SELECT SQL_CALC_FOUND_ROWS语句后面的语句。如果你后续还需要用到这个值，就需要将其保存。

例如:

```javascript
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ;
mysql> SET @rows = FOUND_ROWS();
```



假如你正在使用SQL_CALC_FOUND_ROWS，系统必须计算出在全部结果集合中有多少行。尽管如此，这也还是比不用LIMIT而再次运行查询要快，原因是结果集合不需要被发送到客户端。

SQL_CALC_FOUND_ROWS和FOUND_ROWS()在当你希望限制一个查询返回的行数时是很有用的，同时还能不需要再次运行查询就可以确定全部结果集合中的行数。一个 **例子** 就是提供页式显示的Web脚本，该显示包含显示搜索结果其他部分的页的链接。使用FOUND_ROWS()使你确定剩下的结果需要多少其他的页。

SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 的应用对于UNION 查询比对于简单SELECT 语句更为复杂，原因是在UNION 中，LIMIT 可能会出现在多个位置。它可能适用于UNION中的独立的SELECT语句，或是整个的UNION 结果。

SQL_CALC_FOUND_ROWS对于 UNION的期望结果是它返回在没有全局的LIMIT的条件下而应返回的行数。SQL_CALC_FOUND_ROWS 和UNION 一同使用的条件是：

* SQL_CALC_FOUND_ROWS 关键词必须出现在UNION的第一个 SELECT中。




<!-- -->

* FOUND_ROWS()的值只有在使用 UNION ALL时才是精确的。若使用不带ALL的UNION，则会发生两次删除，而FOUND_ROWS() 的指只需近似的。




<!-- -->

* 假若UNION 中没有出现LIMIT ，则SQL_CALC_FOUND_ROWS 被忽略，返回临时表中的创建的用来处理UNION的行数。






LAST_INSERT_ID() 
-------------------------

**声明** 

`last_insert_id()`

**说明** 

返回本session最后一次插入的自增字段值，如最近一条insert插入多条记录，LAST_INSERT_ID()返回第一条记录的自增字段值。

**例子** 

```javascript
mysql>select LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                5 |
+------------------+
1 row in set (0.00 sec)
```


