mysql进行判断大小_使用 MySQL 的条件判断实现大小值判断

如果在 MySQL 中使用了 InnoDB 引擎,那么对于常规的 COUNT (id) 等操作非常耗费资源,速度比较慢,为了保持效率,需要将这些数据行的统计值保存起来,使用的时候直接查询获取就可以了。比如一个 BBS 系统中需要将每个论坛板块的主题数量和回复数量作为一个字段保存到相应的板块信息表中;如果主题和回复变动不频繁,那么对这个统计值的操作也不频繁,每次使用 COUNT (id) 重新查询还是可行的,但如果面对的是一个大型 BBS,不仅数据量巨大,而且用户数巨大引起主题和回复更新非常快,频繁的对巨量数据调用 COUNT (id) 查询,在性能上是不太现实的;所以,对于频繁更新的统计值,我们可以采用另外一种方法:直接加减。也就是说,如果增加了新主题,针对主题的统计值进行加一操作,反过来,删除主题,进行减一操作。 在 实际使用加减法更新统计值的时候,总有可能会发生统计值不正确的时候,特别是当统计值已经是零的时候如果再次减一,就会变成无法接受的错误:负值;如果你 将统计值字段定义了 unsigned,-1 会变成该字段的最大值(二进制取反引起的),也是无法接受的。这个时候,我们需要一个 SQL 函数,实现类似编程语言中 Max() 函数的功能,将这个统计值最小控制在 0。 在 PostgreSQL 中,有一个叫 greatest 的条件函数,可以让我们通过以下 SQL 语句避免统计值出现负值: UPDATE dd_stml_stat SET stat_value=GREATEST(stat_value-1,0) WHERE stat_id=10; 可惜的是,在 MySQL 中并没有对应的函数,不过 MySQL 有一个叫 IF() 的特殊 Control Flow Function,可以使用它来实现我们的目标: UPDATE dd_stml_stat SET stat_value=(IF(stat_value>1,stat_value-1,0)) WHERE stat_id=10; 其实这个 IF() 函数就是一个简单的判断器,它会判断第一个参数是否成立,如果是 True,就会返回第二个表达式的值,如果是 False,会返回第三个表达式的值;从而变相的在 MySQL 中实现了大小值比对函数。 http://www.360doc.com/content/07/0117/20/18220_334911.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值