一个程序员的重启

本文探讨了Oracle MySQL 8.0.28之前的版本存在的输入验证错误漏洞,建议升级到8.0.29或5.7.38以规避风险。作者分享了对MySQL的深入理解,包括SQL语句的运用、索引、锁和事务的基本概念,强调了它们在性能优化中的重要性。同时,文章提供了几个SQL查询示例,帮助读者提升SQL技能。
摘要由CSDN通过智能技术生成

<<重启3>>

技术分享-MYSQL

引言
最近,Oracle MySQL 8.0.28 及之前版本版本存在输入验证错误漏洞可以升级到最新版本
  一、漏洞具体信息:

    【漏洞编号】CNVD-2022-53246

    【影响范围】Oracle Mysql <=8.0.28

    【漏洞描述】该漏洞源于允许通过多种协议进行网络访问的高权限攻击者破坏MySQL 服务器,攻击者利用该漏洞可以对所有MySQL Server可访问数据的未授权创建、删除或修改访问,以及MySQL Server服务崩溃等。
【规避措施】目前厂商已发布最新版本:8.0.29或5.7.38版本。
前言

博主接触Mysql已经3年了,对他既熟悉也陌生。熟悉因为博主经常用mybatis去写一些比较复杂一点动态sql脚本,对sql语句的应用可以说是很熟练,以及sql代码层上的性能优化做的也还行。陌生因为博主学了这么久只停留在表面太久了对mysql的事务,性能以及数据并发处理等等只停留在知识理论层面,没有进行太深入的研究。今天,博主就想聚这三年对mysql的了解做一些浅谈。

MySQL是什么?

博主一开始对mysql的印象就是一个能存放表数据的关系型数据库。博主入门的时候给它的sql语句深深迷恋住了,mysql也是博主学的第一个数据库。比较官方的说法是:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。那MySQL为什么现在如此壮大?其实所有的开发语言和工具他们中的佼佼者不乏因为一个非常重要的点——社区强大,而MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,让其拥有了强大的社区能力,促使他一步步往前走。

MySQL的sql语句

它的sql语句能千变万化成不同的结果,如果配合起mybatis的动态sql写法,那更是令人神往心怡。博主建议新手可以先去https://www.w3school.com.cn/sql/sql_syntax.asp#学习,建议慢嚼细吞!慢嚼细吞!慢嚼细吞!这样为你后面写sql语句水平进阶有很大的帮助。sql进阶水平之路,博主的建议是:先打好基础的sql简单语句水平,然后尝试去写一些复杂一点的sql语句,列如一些sql的复杂查询语句

#1、查询平均成绩大于60 分的同学的学号和平均成绩;  
select st.sname,ss.sco from student st,(select sno,avg(score)sco from sc group by sno)ss where st.sno=ss.sno and sco>=60;  
#2、查询所有同学的学号、姓名、选课数、总成绩;  
select st.sname,ss.* from student st,(select sno,count(score)sco,sum(score) from sc group by sno)ss where st.sno=ss.sno;  
#3、查询姓“刘”的老师的个数;  
select count(*) from teacher where tname like '%刘%';  
#4、查询没学过“谌燕”老师课的同学的学号、姓名;  
select sc.sno,acno.* from sc sc,(select co.cno from course co,(select tno from teacher where tname='谌燕')tn where co.tno<>tn.tno)acno where acno.cno=sc.cno;  

然后再去了解一些数据库性能优化这方面的sql优化,最后去了解并熟练的掌握mybatis的动态sql语句写法,你就可以完成项目中大部分的sql编辑

MySQL的索引、锁与事务

博主为什么要把这三部分写在一起呢?因为博主太困了,想快点写完WuW。1.什么是索引?2.索引有什么作用?3.索引是怎么实现的?经典面试八股文之索引三连。不同人有不同的回答,不过基本大同小异。

  1. 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
  2. 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
  3. 索引的实现原理——同学想了解索引的实现原理那就先得了解基本的数据结构与算法,然后再点开我这个链接,看看这位大佬的分享。
MySQL的锁有很多,最为出名就是表锁和行锁。

什么是表锁?
简单来说,表锁是就一个事务在对某张表进行操作时会上一个表锁,另一个事务想对这张表进行操作时就会被阻塞等待。
而行锁也是顾名思义,只是他锁的位置范围小了在表的一行。
这样不免知道他们的优缺点在哪了。表锁虽然开销小,锁表快,但高并发下性能低。行锁虽然开销大,锁表慢,但高并发下相比之下性能更高。其中也有读锁,写锁,排他锁,共享锁等等,博主就不一一详说了。

MySQL的事务:

MySQL 事务属性
事务是由一组SQL语句组成的逻辑处理单元,事务具有ACID属性。

原子性(Atomicity):事务是一个原子操作单元。在当时原子是不可分割的最小元素,其对数据的修改,要么全部成功,要么全部都不成功。
一致性(Consistent):事务开始到结束的时间段内,数据都必须保持一致状态。
隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的”独立”环境执行。
持久性(Durable):事务完成后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

事务的常见问题

更新丢失(Lost Update)
原因:当多个事务选择同一行操作,并且都是基于最初选定的值,由于每个事务都不知道其他事务的存在,就会发生更新覆盖的问题。类比github提交冲突。

脏读(Dirty Reads)
原因:事务A读取了事务B已经修改但尚未提交的数据。若事务B回滚数据,事务A的数据存在不一致性的问题。

不可重复读(Non-Repeatable Reads)
原因:事务A第一次读取最初数据,第二次读取事务B已经提交的修改或删除数据。导致两次读取数据不一致。不符合事务的隔离性。

幻读(Phantom Reads)
原因:事务A根据相同条件第二次查询到事务B提交的新增数据,两次数据结果集不一致。不符合事务的隔离性。

还有关于mysql的性能优化,就是锁的应用和事务的使用,从而提高MySQL的性能优化这一方面,我后面再发了,太困了,睡觉!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值