开发者社区> 问答> 正文

update时,没有让某个字段自增或自减的写法么?

update时,没有让某个字段自增或自减的写法么? 比如像sql的 UPDATE question SET like=like+1 WHERE id = 1

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
初商 2019-09-12 10:48:15 1496 0
1 条回答
写回答
取消 提交回答
  • 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

    ———————————————— 版权声明:本文为CSDN博主「神神的蜗牛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zhouzme/article/details/18909469

    2019-09-12 13:37:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载