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

(0)

相关推荐

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

    MySQL的自增语句大家应该都很熟悉 也很简单 复制代码 代码如下: update `info` set `comments` = `comments`+1 WHERE `id` = 32 这样就可以了,但是有时候我们会涉及到做减法, 例如:文章的评论数,在删除或者锁定了一条评论之后需要对该文章总评论数减一 comments smallint(5) unsigned 文章评论总数统计字段 无符号即 0 ~ 65535 之间的数值 1. 通常情况下是可以类似上面自增的方法 把 +号 改成 -号 就

  • Mysql跨表更新 多表update sql语句总结

    假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%. 在Mysql中我们有几种手段可以做到这一点,一种是update table1 t1, table2 ts ...的方式: 复制代码 代码如下: UPDATE product p, productPrice pp SET pp.price = pp.price * 0.8 WHER

  • Mysql查询最近一条记录的sql语句(优化篇)

    下策--查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by create_time desc limit 1 这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时:limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间:还有如果需要批量取出最近一条记录,比方说:"一个订单表,有用户,订

  • access mysql mssql 随机 10条数据的sql语句 原创

    access 随机 10条数据的方法 复制代码 代码如下: select * from table order by rnd(id) 其中rnd(id)中的id为表中的自增长字段access随机显示记录(不重复)解决方案 复制代码 代码如下: <% '-------------------------数据库连接----------------------- Set objConn = Server.CreateObject("ADODB.Connection") objConn.

  • mysql开启慢查询(EXPLAIN SQL语句使用介绍)

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能. 1.开启慢查询 1> 查看慢查询是否开启 show variables like "%quer%"; slow_query_log = ON #已开启 2> 开启方法:my.cnf目录配置 slow_query_

  • SQL语句示例

    SQL的意思是结构化查询语言,其主要功能是同各种数据库建立联系,进行沟通.查询指的是对存储于SQL的数据的请求.查询要完成的任务是:将 Select 语句的结果集提供给用户.Select 语句从 SQL 中检索出数据,然后以一个或多个结果集的形式将其返回给用户.  ========================================================== Select 基本语法结构  ===========================================

  • java跟踪执行的sql语句示例分享

    代码: 复制代码 代码如下: package com.lwj.test.proxy; import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.SQLExce

  • Spring 中jdbcTemplate 实现执行多条sql语句示例

    说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里减去订单所需的钱数,即需要更新银行账户的表,同时需要更新淘宝订单的表将订单状态改为"已付款",这就需要先后执行多个sql(仅仅用于表达执行多的SQL的举例说明,具体淘宝如何实现并不是很清楚~~~~~); 但如果这中间出现电脑断网断电等问题,仅将我们银行账户的钱扣掉了,订单状态并没有改,那我

  • MySql获取某个字段存在于哪个表的sql语句

    复制代码 代码如下: SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = 'col1' col1为子段名.

  • mysql替换表中的字符串的sql语句

    核心语句: UPDATE `cdb_pms` SET `subject` = REPLACE(`subject`, 'Welcome to', '欢迎光临') mysql替换字段里数据内容部分字符串 mysql替换表的字段里面内容,如例子: mysql> select host,user from user  where user='testuser'; +-----------------------+----------+ | host                  | user    

随机推荐