• 〖Python 数据库开发实战 - MySQL篇㉖〗- 数据删除操作 - DELETE语句


    万叶集
    🎉 隐约雷鸣,阴霾天空。 🎉
    🎉 但盼风雨来,能留你在此。 🎉


    前言
    ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS - 全栈 赋能的博主 ✌
    🏆 CSDN博客专家认证、新星计划第三季全栈赛道 MVP 、华为云享专家、阿里云专家博主 🏆
    📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
    💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
    🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


    专栏系列(点击解锁)学习路线(点击解锁)知识定位
    🔥Python全栈白皮书🔥 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
    语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
    自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
    自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
    数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。
    爬虫入门与实战 更新中
    数据分析篇 更新中
    前端入门+flask 全栈篇 更新中
    django+vue全栈篇 更新中
    拓展-人工智能入门 更新中
    网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
    网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
    vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
    shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
    WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
    测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
    测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
    RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
    Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
    MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。

    在这里插入图片描述


    该章节我们将要学习的是作为删除数据使用的 “DELETE” 语句,“DELETE” 语句是用来删除数据的,它不能用来删除数据表本身。删除数据表使用的是 “DROP” 语句,而 “DELETE” 的作用只是用来删除记录而已。



    🐳 DELETE 语句


    • DELETE 语句用于删除记录,语法如下:(与 “UPDATE” 语法较为相似)
    DELETE [IGNORE] FROM 表名
    WHERE 条件1, 条件2, .....
    ORDER BY ......
    LIMIT ......;
    
    -- 使用 IGNORE 关键字时,当存在外键约束组织我们删除记录,那么则会忽略删除该条数据
    -- 使用 WHERE 子句删除条件范围内的记录;如果不使用 WHERE 子句,则是删除全表范围
    -- 使用 ORDER BY 关键字,将被删除的记录进行排序以后,产出符合条件的一些数据
    -- 使用 LIMIT 关键字依然是分页的意思,
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    “DELETE” 语句执行的顺序:FROM ---> WHERE ---> ORDER BY ---> LIMIT ---> DELETE



    🐬 DELETE 语句练习①


    • 删除 10 部门中,工龄超过 20 年的员工记录 (这个比较简单,只涉及到一张表)

    DELETE FROM  t_emp 	
    WHERE deptno = 10 
    AND DATEDIFF(NOW(), hiredate)/365 >= 20;
    
    • 1
    • 2
    • 3


    🐬 DELETE 语句练习②


    • 删除 20 部门中工资最高的员工记录(除了使用 WHERE 子句过滤出 20 部门中员工之外,还需要根据 工资 进行 降序 排列,并删除最高的记录)

    DELETE FROM  t_emp 	
    WHERE deptno = 20 
    ORDER BY sal+IFNULL(comm,0) DESC
    LIMIT 1;
    
    • 1
    • 2
    • 3
    • 4

    "DELETE" 语句的语法还是很简单的,在有了 "UPDATE" 语句的基础之后再来看待 "DELETE" 语句就比较好理解了,因为这些子句都差不太多。



    🐳 DELETE 语句的表连接(内连接)


    • 因为相关子查询效率非常的低下,所以我们可以利用表连接的方式来提高 DELETE 语句的删除效率。

    “DELETE” SQL语句的内连接语法如下:

    DELETE1, ...... FROM1 JOIN2 ON 条件
    WHERE 条件1, 条件2, ......
    ORDER BY ......
    LIMIT ......
    
    -- 需要注意的是,这里的 "WHERE"、"ORDER BY"、"LIMIT" 子句都是可选条件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6


    🐬 DELETE 语句的表连接练习①


    • 删除 SALES 部门和该部门的全部员工记录
    • 分析:删除两张表的记录
    • 分析:使用 一个 DELETE 语句删除两张表记录,可以使用表连接的方式(参考上文语法)
    • 分析:属于 SALES 部门的员工记录未知,需要先试用条件查询过滤出 SALES 部门的员工记录

    DELETE e, d
    FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
    WHERE d.dname="SALES";
    
    • 1
    • 2
    • 3




    🐬 DELETE 语句的表连接练习②


    • 删除每个低于部门平均底薪的员工记录
    • 分析:依然使用表连接,因为首先需要去查询部门进行分组,查询部门的编号与平均底薪。
    • 分析:将查询到的结果集作为一张表和 "员工表" 做连接,连接条件就是员工的 "部门编号",还有一个条件就是员工的月薪要低于部门的平均底薪

    DELETE e
    FROM t_emp e JOIN (SELECT deptno, AVG(sal) AS avg FROM t_emp GROUP BY deptno) t
    ON e.deptno=t.deptno 
    AND e.sal < t.avg;
    
    • 1
    • 2
    • 3
    • 4


    🐬 DELETE 语句的表连接练习③


    • 删除员工 “KING” 和 他的下属的员工记录,用表连接来实现
    • 分析:用 "WHERE" 子句查找 "ename" 为 "KING" 的员工记录
    • 分析:将查到的 "KING" 的员工记录与员工表的 "mgr" 字段为 "KING" 的 "员工编号" 做连接

    DELETE e
    FROM t_emp e JOIN (SELECT empno FROM t_emp WHERE ename="KING") t
    ON e.mgr=t.empno OR e.empno=t.empno;
    
    • 1
    • 2
    • 3


    🐳 DELETE 语句的表连接(外连接)


    • “DELETE” 语句的表连接既可以是内连接,也可以是外连接。

    “DELETE” SQL语句的外连接语法如下:

    DELETE1, ...... FROM1 [LEFT | RIGHT] JOIN2 ON 条件
    WHERE 条件1, 条件2, ......
    ORDER BY ......
    LIMIT ......
    
    -- 需要注意的是,这里的 "WHERE"、"ORDER BY"、"LIMIT" 子句都是可选条件
    -- 除了 在连接表 的时候选择 "LEFT JOIN" 与 "RIGHT JOIN" 的区别之外,其他的与内连接的语法一样
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    🐬 DELETE 语句的外连接练习


    • 删除 “SALES” 部门的员工,以及没有部门的员工。
    • 分析:使用 "左外连接" 与 部门表进行连接,因为 "员工表" 中的 "张三" 是没有部门的;所以要保留下来,与部门表进行连接。

    DELETE e
    FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
    WHERE d.dname="SALES" OR e.deptno IS NULL
    
    • 1
    • 2
    • 3



    🐳 快速删除表中的全部数据


    • “DELETE” 语句是在事务机制下删除记录(什么是 “事务机制” 会在后续文章详细介绍),删除记录之前,先要将删除的记录保存到日志文件里,然后再删除记录。当使用 “DELETE” 去删除海量数据的时候,“事务机制” 会让删除的速度变得很慢。
    • “TRUNCATE” 语句在 “事务机制” 之外删除记录,执行速度要远远地超过 “DELETE” 语句。

    “TRUNCATE” 语法如下:

    TRUNCATE TABLE 表名;
    
    -- 需要注意的是,"TRUNCATE"  语句一次只能清空一张数据表,不能够一次性的清空多张数据表。
    
    • 1
    • 2
    • 3

    TRUNCATE TABLE t_emp ;
    
    • 1


    🐳 MySQL 删除语句小节


    语句功能

    drop 语句
    删除数据库和表
    drop 数据库名;
    drop 表名;

    delete 语句
    删除表中的记录
    delete from weibo_user where username=“xiaomu”;
    注意:delete语句中如果没有加入where条件,将会把表中的所有记录全部删除

    update set 语句
    修改和更新语句,更新时也会覆盖(删除)原来的值
    update set与where搭配使用,变更某些记录
    注意::update set语句中如果没有where子句指定其变更的条件,将就会把数据库中这个字段的所有值都更新

    alert 语句
    删除字段:alter table 表名 drop 字段名;
    删除主键:alter table 表名 drop primary key ;
    更新表名:alter table 表名 rename to 新表名;


  • 相关阅读:
    什么是固话号码认证?固话号码认证有用吗?
    Virtio-PMD的路径选择与用法
    vue2和vue3的区别?
    传感器数据采集:采样定理(奈奎斯特定理)
    密码学系列4-选择密文安全,同态加密安全性
    Redis
    MySQL 解决数据重复添加
    Scala配置和Spark配置以及Scala一些函数的用法(附带词频统计实例)
    关于分离式编译(.h和.cpp,编译哪些东西)
    Java异常处理机制
  • 原文地址:https://blog.csdn.net/weixin_42250835/article/details/126257832