移植

IF @@ROWCOUNT < 1

对应到mysql中可以使用 FOUND_ROWS() 函数来替换。

1. found_rows() 函数的文档:

1) found_rows() 的第一种使用情况( 带有 SQL_CALC_FOUND_ROWS,也带有limit ):

A SELECT statement may include a LIMIT clause to restrict the number of rows the server returns to the LIMIT , but without running the statement again. To obtain this row count, include a SQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke FOUND_ROWS() afterward:

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

The second SELECT returns a number indiSELECT would have returned had it been written without the LIMIT clause.

前面的 带有limit 的select语句如果 加上了 SQL_CALC_FOUND_ROWS ,那么接下来执行的 SELECT FOUND_ROWS(); 将返回前面语句不带limit语句返回的行数 。

2) found_rows() 的第二种/第三中使用情况( 不 带有 SQL_CALC_FOUND_ROWS ):

In the absence of the SQL_CALC_FOUND_ROWS option in the most recent successful SELECT statement, FOUND_ROWS() returns the number of rows in the result set returned by that statement. If the statement includes a LIMIT clause, FOUND_ROWS() returns the number of rows up to the limit . For FOUND_ROWS() returns 10 or 60, respectively, if the statement includes LIMIT 10 or LIMIT 50, 10 .

The row count available through FOUND_ROWS() is transient and not intended to be available past the statement following the SELECT SQL_CALC_FOUND_ROWS statement. If you need to refer to the

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

If you are using SELECT SQL_CALC_FOUND_ROWS , MySQL must calculate how many rows are in the full result set. However, this is faster than running the query again without LIMIT , because the result set need not be sent to the client.

1> 第二种使用情况( 不 带有 SQL_CALC_FOUND_ROWS,也没有带 limit ):

如果前面的select语句没有带 SQL_CALC_FOUND_ROWS,也没有带 limit ,那么后面的 SELECT FOUND_ROWS(); 返回的结果就是前面的select返回的行数;

2> 第三中使用情况( 不 带有 SQL_CALC_FOUND_ROWS,但是有带 limit ) :

如果前面的select语句没有带 SQL_CALC_FOUND_ROWS,但是带有 limit,那么后面的 SELECT FOUND_ROWS(); 返回的结果就是limit语句到达的最大的行数,比如:select * from xxx limit 10; 到达的最大的行数为10,所以 found_rows() 返回10;比如 select * from xxx limit 50,10; 它要从第50行开始,再扫描10行,所以到达的最大的行数为60,所以found_rows() 返回60。

这里第一个select found_rows() 返回105,因为他是从偏移100的地方,再扫描5行,所以返回105;但是第二个扫描的结果为空,select found_rows()返回了0!而不是105, 因为 where userId=999999的结果为空, 所以后面的 limit 100,5根本就没有执行 。 所以select found_rows()返回了0 。

再看一个例子,更深入的理解其中情况下的 found_rows():

上面sql中 user_Pwd=xx 的值都是一样的。可以看到这种情况下的 found_rows() 是对的select语句的中间结果,再 limit 时,此时的limit的扫描到的最大的行数。和原始表中的 。他是对select的中间结果的limit,然后才得到最后的结果集,再返回。

3) SQL_CALC_FOUND_ROWS and FOUND_ROWS() 适合使用的场景

SQL_CALC_FOUND_ROWS and FOUND_ROWS() can be useful in situations when you want to restrict the number of rows that a query returns, but also deteFOUND_ROWS() enables you to determine how many other pages are needed for the rest of the result.

1> SQL_CALC_FOUND_ROW + limit + found_rows() 可以使用在

2> 不带SQL_CALC_FOUND_ROW 的 found_rows() 可以使用在 存储过程中 判断前面的select是否为空 :

DELIMITER // DROP PROCEDURE IF EXISTS loginandreg // CREATE PROCEDUREloginandreg( OUT userIdBIGINT,IN user_Pwd VARCHAR(32),IN user_MobileCode VARCHAR(16),IN user_RegIP VARCHAR(16) )BEGIN IF EXISTS(SELECT * FROM Users u WHERE u.user_MobileCode=user_MobileCode) THEN SELECT u.userId INTO userId FROM Users u WHERE u.user_MobileCode=user_MobileCode AND u.user_Pwd=user_Pwd;IF FOUND_ROWS() < 1 THEN SELECT -1 INTOuserId;END IF;ELSE INSERT INTOUsers(user_Pwd,user_MobileCode,user_Visibility,user_Level,user_RegTime,user_RegIP,user_Collecter,user_Collected)VALUES (user_Pwd,user_MobileCode,6,6,NOW(),user_RegIP,0,0);SELECT LAST_INSERT_ID() INTOuserId;END IF;END //DELIMITER ;

上面存储过程中的:

SELECT u.userId INTO userId FROM Users u WHERE u.user_MobileCode=user_MobileCode AND u.user_Pwd=user_Pwd;IF FOUND_ROWS() < 1 THEN SELECT -1 INTOuserId;END IF;

就是一个很好的使用的例子。

这种存储过程的场景中就 可以使用 mysql 的 FOUND_ROWS() 替换 sql server 存储过程中的 IF @@ROWCOUNT < 1 语句 。

mysql中的found_MySQL 中的 FOUND_ROWS() 函数相关推荐

  1. mysql中的found_MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数

    移植sql server 的存储过程到mysql中,遇到了sql server中的: IF @@ROWCOUNT < 1 对应到mysql中可以使用 FOUND_ROWS() 函数来替换. 1. ...

  2. mysql foundrows 并发_MySQL 中的 FOUND_ROWS() 函数

    标签: 移植sql server 的存储过程到mysql中,遇到了sql server中的: IF @@ROWCOUNT < 1 对应到mysql中可以使用 FOUND_ROWS() 函数来替换 ...

  3. mysql提取数字_Mysql中实现提取字符串中的数字的自定义函数分享

    因需要在mysql的数据表中某一字符串中的字段提取出数字,在网上找了一通,终于找到了一个可用的mysql函数,可以有效的从字符串中提取出数字. 该mysql提取出字符串中的数字函数如下: 复制代码 代 ...

  4. mysql日期格式化季度_mysql中常用日期比较与计算函数

    MySql中时间比较的实现 unix_timestamp() unix_timestamp 函数可以接受一个参数,也可以不使用参数. 它的返回值是一个无符号的整数.不使用参数,它返回自1970年1月1 ...

  5. mysql iso 时间_mysql 中 时间和日期函数

    原文链接: mysql 中 时间和日期函数 - redfox - 博客园 http://www.cnblogs.com/redfox241/archive/2009/07/23/1529092.htm ...

  6. mysql explode函数_hive中,lateral view 与 explode函数

    hive中常规处理json数据,array类型json用get_json_object(#,"$.#")这个方法足够了,map类型复合型json就需要通过数据处理才能解析. exp ...

  7. MySQL里和trunc函数相同的_mysql 函数中与Oracle中ltrim函数功能相同的函数是什么函数?...

    一.ANSI字符函数 字符函数用于在SQL里以不同于存储方式的格式来表示字符串. 串接就是把两个单独的字符串组合为一个. 子串的概念就是从字符串里提取一部分. TRANSLATE函数用于逐字符地把一个 ...

  8. Mysql 中 “必知” 的单行处理函数

    Mysql 中必知的单行函数 每博一文案 钱钟书就曾感慨道,在我一知半解的几国语言中,没有比中国古语 所谓的素交,更能表现出友谊骨髓,素是一切颜色的基础,同时也是 一切颜色的调和,像白日包含了基色,真 ...

  9. hibernate mysql 时间比较_Hibernate中HQL函数汇总及获取当前时间进行比较举例

    在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hiberna ...

最新文章

  1. .Net之用户控件笔记
  2. iOS开发-NULL和nullptr和nil和Nil还有NSNull
  3. 【有福如林】OpenFlashChart C#flash图形控件的使用
  4. 【一天一个shell命令】好管家-磁盘-du
  5. 单列集合Set的实现类TreeSet
  6. php 面向对象 特性,PHP面向对象三大特点学习
  7. Linux系统学习之 三:新手必须掌握的Linux命令3
  8. 浅谈linux性能调优之六:IO调度算法的选择
  9. oracle设置口令期限,[20180316]改变oracle用户口令时限.txt
  10. python水仙花数的代码_Python水仙花数的编程代码写法
  11. 斐讯K1S路由器刷华硕固件教程
  12. Android实现思维导图功能,Android实现思维导图
  13. 苹果笔记本电脑如何清理缓存内存空间?
  14. Hijacking tons of Instapage expired users Domains Subdomains
  15. Django计算机毕业设计交通违章举报平台(程序+lw)Python
  16. 基于微信小程序的新生自助报到系统小程序
  17. winds操作系统下登录本地MySQL和远程MySQL
  18. MP4转gif得力工具
  19. 项目经理的权力永动机
  20. linux win10自带浏览器,win10系统下如何安装opera浏览器

热门文章

  1. Unrecognized font family 'xxxx'(已解决)
  2. linux基础27——chown
  3. [图] Floyd算法|佛洛依德 - 任意两点的最短路径 - C语言实现
  4. JDK8 日期 API 使用
  5. Xsens MTi传感器 ROS下配置
  6. 步进电机只朝一个方向旋转的解决方法(自己踩过的坑)
  7. Git remote: Unauthorized
  8. 你还在为如何写CSS代码白了少年头嘛??
  9. flatten-maven-plugin 的使用
  10. 三种空格unicode(\u00A0,\u0020,\u3000)