声明:本文基于MySQL讲解。

先不说习惯不习惯的,很多人也许会惊讶:还可以这样操作?其实,大家对这个操作比较陌生,也不奇怪。因为,学海无涯呀~

语法

这个用法的详细语法是这样的:delete from table_name where ... limit row_count。

row_count表示行数,必须是单个数字,它会告知服务器在控制命令被返回到客户端前被删除的行的最大值。从而确保一个delete语句不会占用过多的时间。

Delete语句还可以包括一个Order By子句,那样则会按照子句中指定的顺序进行删除。但是Order By子句必须与limit联用是才起作用。例如,以下子句用于查找与WHERE子句对应的行,使用age进行排序,并删除第一(年龄最大的)行:

delete from user where user_name = '马云' order by age desc limit 1;

分析一个场景

在业务场景复杂的情况下,单表删除带上limit是一个很好的习惯。

因为,我们要知道delete删除是不会释放磁盘空间的。

假如在删除执行中,第一行就命中了删除行,如果不带上limit,那么数据库还会在全表扫描之后才return,这样会很占用资源,数据量小还好说,但是如果这条表的数据量是100万条,1000万条呢,消耗的资源可想而知,而且效果还不好。如果SQL中有limit 1,那么在扫描第一行后就return了。

优点

以上面删除年龄最大的行SQL语句为例,大致有以下几个优点:降低delete的风险。加上limit row_count,最多损失row_count行数据。并且可以通过binlog找回,不会耗费多长时间,工作量也不大。

避免长事务,减少其他客户端资源等待的时间。执行delete操作时,MySQL会将所有涉及的行加上写锁和Gap锁(间隙锁),如果user_name字段建立了索引,那么只锁定user_name等于‘马云’的数据,但是如果where条件的字段没建索引,那么就会扫描到主键索引上,给全表加锁,即便叫‘马云’的只有一个人

减少CPU使用率。delete执行删除的数据量大时,会将CPU打满,导致后续删除越来越慢。

mysql delete limit用法_你习惯delete语句后带上limit吗相关推荐

  1. oracle mysql limit用法_mysql以及oracle数据分页的sql示例(limit和Rownum的用法) | Soo Smart!...

    对数据查询结果集截断获取,来实现数据库层的分页.在mysql以及Oracle下的实现如下: MySQL下使用limit和offset,Oracle使用Rownum. MySQL下limit和offse ...

  2. mysql中groupby用法_详解SQL中GroupBy的用法

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 1.概述 "Group By"从字面意义上理解就是根据"By"指定的规则对数据进行分 ...

  3. mysql delete exists用法_自学MySQL第五天

    关于Subqueries复合句,很多时候可以和JOIN形式互相替换,这时就要注意performance和readability,MOSH老师让观看者先注意readability,给出的练习为找出买了p ...

  4. MYSQL中LIMIT用法_后台分页

    LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数. 1)其语法格式如下: LIMIT[位置偏移量,]行数 其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开 ...

  5. mysql begin end 用法_超实用的Mysql动态更新数据库脚本的示例讲解(推荐)

    今天小编为大家分享一篇关于Mysql动态更新数据库脚本的示例讲解,具体的upgrade脚本如下: 动态删除索引 DROP PROCEDURE IF EXISTS UPGRADE;DELIMITER $ ...

  6. mysql begin end 用法_数据库:Mysql中“select ... for update”排他锁分析

    作者:志波同学来源:https://mp.weixin.qq.com/s/8uH-7TD9ZRG4NCya80mOHg Mysql InnoDB 排他锁 用法:select - for update; ...

  7. mysql中on用法_详解mysql中的Using与On的用法

    多用才可以体会各个关键字的用法啊... 在用Join进行多表联合查询时,我们通常使用On来建立两个表的关系.其实还有一个更方便的关键字,那就是Using.那么这两个关键字在使用上有啥区别呢?往下看. ...

  8. mysql中gt用法_讲解MySQL中lt;=gt;操作符的用法-一团网

    问题 : 我在看以前的一个开发者的代码时看到 在这个查询语句中 <=>符号是什么意思啊?是不是和 =号是一样啊?还是一个语法错误啊?但是没有显示任何错误或者异常.我已经知道了mysql中的 ...

  9. mysql 交叉连接的用法_深入理解MySQL的外连接、内连接、交叉连接

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

最新文章

  1. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名...
  2. 步步为营-20-XML
  3. python asyncio理解_我实在不懂Python的Asyncio
  4. POJ 3164 Command Network (最小树形图)
  5. 【渝粤教育】广东开放大学 财政学 形成性考核 (43)
  6. 深度学习目标检测之 YOLO v1
  7. Windows平台基于RTMP实现一对一互动直播
  8. 待人真诚p2psearcher2013源码下载
  9. 实验五 网络编程与安全
  10. nginx+php 完成 kod云搭建(ansible使用变量)
  11. 微信小游戏排行榜制作(主域子域)
  12. 【科研工具】在科研人的浏览器里,多个插件多条路。
  13. 201819101025王涵月
  14. 懂车帝与蛋蛋订车两大平台对比
  15. python卷积神经网络图像,python卷积神经网络代码
  16. 香港大学赵恒爽老师招收计算机视觉博士/博士后/研究助理
  17. 被动语态和非谓语区别_判断非谓语动词是否用被动式的三个技巧
  18. 黑马Python教程实战项目--美多商城(五)
  19. 第十一届蓝桥杯B组Java试题答案(省赛)
  20. python爬虫——爬取淘票票正在热映电影

热门文章

  1. java date 最小值_java – Datepicker和timepicker – 设置最大值和最小值
  2. 2014届华为校园招聘机试题
  3. java8 java9 接口 interface
  4. Spring mvc中自定义拦截器
  5. Python 模块之 time datetime
  6. ORA-12516:TNS:listener could not find available handler with matching protocol stack
  7. Cracking The Coding Interview 9.1
  8. 【转】【Asp.Net】Asp.net发送邮件的两种方法小结
  9. 使用httpHandlers进行url rewrite时,提示http 404 error 错误
  10. 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd