mysql delete limit用法_你习惯delete语句后带上limit吗
声明:本文基于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吗相关推荐
- oracle mysql limit用法_mysql以及oracle数据分页的sql示例(limit和Rownum的用法) | Soo Smart!...
对数据查询结果集截断获取,来实现数据库层的分页.在mysql以及Oracle下的实现如下: MySQL下使用limit和offset,Oracle使用Rownum. MySQL下limit和offse ...
- mysql中groupby用法_详解SQL中GroupBy的用法
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 1.概述 "Group By"从字面意义上理解就是根据"By"指定的规则对数据进行分 ...
- mysql delete exists用法_自学MySQL第五天
关于Subqueries复合句,很多时候可以和JOIN形式互相替换,这时就要注意performance和readability,MOSH老师让观看者先注意readability,给出的练习为找出买了p ...
- MYSQL中LIMIT用法_后台分页
LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数. 1)其语法格式如下: LIMIT[位置偏移量,]行数 其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开 ...
- mysql begin end 用法_超实用的Mysql动态更新数据库脚本的示例讲解(推荐)
今天小编为大家分享一篇关于Mysql动态更新数据库脚本的示例讲解,具体的upgrade脚本如下: 动态删除索引 DROP PROCEDURE IF EXISTS UPGRADE;DELIMITER $ ...
- mysql begin end 用法_数据库:Mysql中“select ... for update”排他锁分析
作者:志波同学来源:https://mp.weixin.qq.com/s/8uH-7TD9ZRG4NCya80mOHg Mysql InnoDB 排他锁 用法:select - for update; ...
- mysql中on用法_详解mysql中的Using与On的用法
多用才可以体会各个关键字的用法啊... 在用Join进行多表联合查询时,我们通常使用On来建立两个表的关系.其实还有一个更方便的关键字,那就是Using.那么这两个关键字在使用上有啥区别呢?往下看. ...
- mysql中gt用法_讲解MySQL中lt;=gt;操作符的用法-一团网
问题 : 我在看以前的一个开发者的代码时看到 在这个查询语句中 <=>符号是什么意思啊?是不是和 =号是一样啊?还是一个语法错误啊?但是没有显示任何错误或者异常.我已经知道了mysql中的 ...
- mysql 交叉连接的用法_深入理解MySQL的外连接、内连接、交叉连接
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...
最新文章
- C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名...
- 步步为营-20-XML
- python asyncio理解_我实在不懂Python的Asyncio
- POJ 3164 Command Network (最小树形图)
- 【渝粤教育】广东开放大学 财政学 形成性考核 (43)
- 深度学习目标检测之 YOLO v1
- Windows平台基于RTMP实现一对一互动直播
- 待人真诚p2psearcher2013源码下载
- 实验五 网络编程与安全
- nginx+php 完成 kod云搭建(ansible使用变量)
- 微信小游戏排行榜制作(主域子域)
- 【科研工具】在科研人的浏览器里,多个插件多条路。
- 201819101025王涵月
- 懂车帝与蛋蛋订车两大平台对比
- python卷积神经网络图像,python卷积神经网络代码
- 香港大学赵恒爽老师招收计算机视觉博士/博士后/研究助理
- 被动语态和非谓语区别_判断非谓语动词是否用被动式的三个技巧
- 黑马Python教程实战项目--美多商城(五)
- 第十一届蓝桥杯B组Java试题答案(省赛)
- python爬虫——爬取淘票票正在热映电影
热门文章
- java date 最小值_java – Datepicker和timepicker – 设置最大值和最小值
- 2014届华为校园招聘机试题
- java8 java9 接口 interface
- Spring mvc中自定义拦截器
- Python 模块之 time datetime
- ORA-12516:TNS:listener could not find available handler with matching protocol stack
- Cracking The Coding Interview 9.1
- 【转】【Asp.Net】Asp.net发送邮件的两种方法小结
- 使用httpHandlers进行url rewrite时,提示http 404 error 错误
- 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd