MySQL字段自增自减的SQL语句示例介绍

 更新时间:2014年02月07日 11:49:43   作者:  
MySQL的自增语句大家应该都很熟悉,本文为大家介绍下MySQL字段自增自减的SQL语句,需要的朋友可以参考下
MySQL的自增语句大家应该都很熟悉 也很简单
复制代码 代码如下:

update `info` set `comments` = `comments`+1 WHERE `id` = 32

这样就可以了,但是有时候我们会涉及到做减法,

例如:文章的评论数,在删除或者锁定了一条评论之后需要对该文章总评论数减一

comments smallint(5) unsigned 文章评论总数统计字段 无符号即 0 ~ 65535 之间的数值

1. 通常情况下是可以类似上面自增的方法 把 +号 改成 -号 就行了,但问题是如果当前 comments 统计数值为 0 时 再做减法将会变成该字段类型的最大数值 65535
复制代码 代码如下:

update `info` set `comments` = `comments`-1 WHERE `id` = 32

2. 为避免这个问题一般的想法只能是先根据 id 主键查询出文章 comments 统计字段值,再通过PHP做减法,然后再 update 一次,前后总共需要执行两次SQL命令

今天google查了下没找到这方面的资料,看了看MySQL的语法函数等等。。。试了下面的语句可以直接一条语句完成,也就是加个 if 判断,如下示例:
复制代码 代码如下:

update `info` set `comments` = IF(`comments`< 1,0,`comments`-1) WHERE `id` = 32

默认comments为0时, comments-1 = 65535;但测试了下 如果直接 判断 comments-1=65535 好像不行,不知道什么原因,对这个不是很熟悉不知道是不是 这里的 if 不支持 = 号,但是 comments-1 >= 65535 可以成立,于是当 comments 为 0 时,IF(`comments`-1>=65535,0,`comments`-1) 将返回 0提示:最大数值 65535 是 smallint 无符号状态下的最大值,其他字段类型请进行相应调整

----------------------------------------------------------------------------------------------------------------------

2014/02/03 补充:刚开始是这么写的,后来发现太笨了,稍微改下:
复制代码 代码如下:

update `info` set `comments` = IF(`comments`<1, 0, `comments`-1) WHERE `id` = 32

要减x,就判断是否小于x

相关文章

  • centos下mysql主从复制设置详解

    centos下mysql主从复制设置详解

    centos5.4下mysql主从复制步骤详解,大家参考使用吧
    2013-12-12
  • MySQL/MariaDB的Root密码重置教程

    MySQL/MariaDB的Root密码重置教程

    这篇文章主要给大家介绍了关于MySQL/MariaDB的Root密码重置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 将MySQL查询结果按值排序的简要教程

    将MySQL查询结果按值排序的简要教程

    这篇文章主要介绍了将MySQL查询结果按值排序的简要教程,不过同样需要对结果进行检查而决定是否使用order by等其他语句,需要的朋友可以参考下
    2015-12-12
  • 利用explain排查分析慢sql的实战案例

    利用explain排查分析慢sql的实战案例

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,下面这篇文章主要给大家介绍了关于利用explan排查分析慢sql的相关资料,需要的朋友可以参考下
    2022-04-04
  • MySQL笔记之视图的使用详解

    MySQL笔记之视图的使用详解

    使用视图的大部分情况是为了保障数据安全性,提高查询效率
    2013-05-05
  • mysql 5.7更改数据库的数据存储位置的解决方法

    mysql 5.7更改数据库的数据存储位置的解决方法

    随着MySQL数据库存储的数据逐渐变大,已经将原来的存储数据的空间占满了,导致mysql已经链接不上了。所以要给存放的数据换个地方,下面小编给大家分享mysql 5.7更改数据库的数据存储位置的解决方法,一起看看吧
    2017-04-04
  • 详解一条update语句是怎样执行原理解析

    详解一条update语句是怎样执行原理解析

    这篇文章主要为大家介绍了详解一条update语句是怎样执行原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 深入了解mysql的4种常用、重要的数据类型

    深入了解mysql的4种常用、重要的数据类型

    对于在开发大型电子商务网站时,如果碰到有限的硬件和系统环境情况下,合理的数据库表结构的设计是必不可少的
    2014-05-05
  • MySQL中的随机抽取的实现

    MySQL中的随机抽取的实现

    本文主要介绍了MySQL中的随机抽取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL 双向备份的实现方法

    MySQL 双向备份的实现方法

    这篇文章主要介绍了MySQL 双向备份的实现方法,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave,感兴趣的可以了解一下
    2019-04-04

最新评论