1.事务的ACID

原子性(Atomicity):事务执行要么全部成功,要么全部都不成功。 一致性(Consistent):事务必须让数据库从一个一致性状态转变为另一个一致性状态 隔离性(Isolation):排除其他事务对本事务的影响 持久性(Durable):事务完成后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

2.事务的隔离级别

  1. 读未提交:A事务读到B事务还没有提交的数据,如果B回滚数据,则A就出现了脏读
  2. 读已提交:A事务从数据库中取出a数据为100,B事务对数据a减50,并提交事务,这时A事务再读a就变为 了50,前后读取的数据不一致,出现不可重复读
  3. 可重复读:当A事务开启事务时,B事务可以update(但update的数据A数据查不到),也可以Insert,A本来扫表查询出2条记录,B这时向表中插入一条数据,这时A查表发现是3条,似乎出现了幻读
  4. 可串行化:事务串行化顺序执行,不会出现以上现象

不可重复读与幻读有什么区别?


  • 不可重复读的重点是修改:在同一事务中,同样的条件,第一次读的数据和第二次读的「数据不一样」(因为中间有其他事务提交了修改);
  • 幻读的重点在于新增或者删除:在同一事务中,同样的条件,第一次和第二次读出来的「记录数不一样」(因为中间有其他事务提交了插入/删除)。

MySql基础

mysql框架图:
image.png

连接器

客户端经过tcp握手,验证身份,就连接到mysql,连接器一般默认空闲连接时间为8小时,如果我们数据库客户端太久没响应,就会自动断开连接

查询缓存

  • MySql拿到一个请求后会先到缓存里看看,之前是不是执行过这条语句,他跟Redis一样,只要是你之前执行过的语句,都会在内存里面用key-value形式存储着。
  • 但是缓存会因为这个表有任何更新,缓存就会全部被清空
  • 缓存在MySql8.0以后就取消了

    分析器

  • 词法分析,识别每个单词的语义

  • 语法分析,看sql语法是否有误

    优化器

    优化你的查询,用哪个索引更好,优化器就是选择出最优的方案去执行器执行

数据库范式

第一范式:
数据组的每个属性只可以包含一个值
第二范式:
要求数据库表中的每个实体必须可以被唯一区分
第三范式:
不包含已在其他表中已包含的非主关键字信息

例如数据为:学号、姓名、班级、班主任 学号(决定)—->姓名 班级(决定)—->班主任 要把班级信息拆除出来 学生表、班级表

SQL执行顺序

1.执行from语句
2.执行on过滤
3.执行where过滤
4.执行group by 分组
5.使用having 过滤
6.select列表
7.执行DISTINCT子句
8.执行order by