Java学习记--数据库

前言:
开始分享之前,博客主要是为了记录学习。在学习过程中不免会出现错误,也欢迎大家在评论区指正。我会认真回复大家的。谢谢!!

内容介绍

  • 主要学习数据库基本知识,以及数据库中比较重要的存储引擎,事务和隔离,索引,还有锁。
  • 主要来源于八股文资料,b站,面试鸭

学习总结

在这里插入图片描述

另外有些内容在思维导图上写不太多,就大致的写了,我在MarkDown上已经编写了

数据库对事务的支持

一、数据库事务的基本特性

注:(ACID,这些确保事务的一致性和可靠性)

1.原子性(Atomicity):事务被视为一个不可分割的工作单位,事务中的所有操作要么全部提交成功,要么全部失败回滚,对于其他事务的操作是不可见的

2.一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。一致性与原子性是密切相关的

3.隔离性(Isolation):数据库系统提供一定的隔离机制,使得并发执行的事务之间不会互相干扰,每个事务都感觉自己是在一个单独的环境中执行

4.持久性(Durability) :一旦事务提交,则其所做的修改就会永久保存在数据库中,即使发生系统崩溃也不会丢失

二、数据库事务的隔离级别

注:(避免事务之间的干扰,来控制事务的可见性和一致性)

  1. 读未提交(Read Uncommitted):允许另外一个事务可以看到这个事务未提交的数据,这可能导致脏读、不可重复读和幻读。安全性太差。
  2. 读已提交(Read Committed):确保事务只能读取已经被其他事务提交的数据,这可以避免脏读,但可能出现不可重复读和幻读。大多数据库默认隔离级别。
  3. 可重复读(Repeatable Read):保证在同一个事务中多次读取同样记录的结果是一致的,这可以避免脏读和不可重复读,但可能出现幻读。MySQL的默认隔离级别
  4. 可串行化(Serializable):这是最高的隔离级别,它通过强制事务串行执行,来避免脏读、不可重复读和幻读。但这种方式会严重影响并发性能。
  • 补充

1.脏读:所有事务都能读取到别的事务中未提交的数据

2.可重复读:在并发读取数据的时候会读取到不一样的数据

3.幻读:当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户在读取该范围的数据行时,会发现有新的“幻影”行

怎么解决幻读:在InnoDB和Falcon存储引擎通过多版本并发控制(MVCC)机制解决了该问题

三、数据库事务的并发控制

注:(多个事务对共享资源的访问,确保事务的隔离性和一致性)

  1. 锁(Locking):通过锁定数据库中的资源(如表、行等)来防止其他事务对这些资源的访问,从而保证事务的隔离性。锁的类型包括共享锁和排他锁等。
  2. 时间戳排序(Timestamp Ordering):给每个事务分配一个时间戳,根据时间戳的先后顺序来确定事务的执行顺序,从而解决事务之间的冲突。
  3. 多版本并发控制(MVCC):允许事务在数据库中创建多个版本的数据,每个版本都有一个时间戳,读操作可以选择特定时间点或时间段的数据版本,从而实现对历史数据的访问。

四、数据库事务的提交与回滚

提交(Commit):当事务中的所有操作都成功执行后,事务会被提交,所做的修改会被永久保存到数据库中。

回滚(Rollback):如果事务在执行过程中遇到错误或需要撤销操作,事务会被回滚到事务开始前的状态,所做的修改会被撤销。

  • 什么情况下会出现异常:

1.数据库连接问题:事务执行期间,数据库连接中断或数据库不可用

2.违反数据库约束:数据不符合要求

3.死锁:多个事务相互等待对方释放资源

4.超时:如果设置最大时间限制可能会出现

5.程序错误

6.并发错误:不正确地处理并发控制,可能会导致事务异常

7.资源耗尽

8.操作中断:硬件损坏啥的强制打断

五、数据库事务的分类

注:(根据事务涉及的节点数量,事务可以分为集中式事务和分布式事务)

  1. 集中式事务:单个节点参与的事务,如单个数据库实例中的事务。
  2. 分布式事务:由多个节点参与的事务,这些节点可能分布在不同的数据库实例或不同的地理位置上。分布式事务需要确保所有节点上的操作都成功执行,否则需要回滚所有节点的操作。

心得体会

内容大致上是还是存在缺陷的,这仅是我现在所收集到的内容。
学习了一遍之后,还是得多看多记多去了解和使用。

  • 还有一个目标就是MySql的优化
  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值