数据库的事务

本文详细阐述了事务的ACID特性,探讨并发事务可能遇到的脏读、不可重复读和幻读问题,以及MySQL的四种隔离级别。此外,还讲解了undolog和redolog的区别以及事务一致性保证的方法。最后涉及数据库主从同步和分库分表的实现原理。
摘要由CSDN通过智能技术生成

目录

事务的特性是什么?

并发事务产生的问题及解决方法

MySQL的隔离级别

undo log和redo log的区别?

事务中的隔离性是如何保证的?


事务的特性是什么?

事务的特性:ACID即原子性,一致性,隔离性,持久性。

并发事务产生的问题及解决方法

1. 脏读,一个事物读到了另外一个事物还没有提交的数据。

2. 不可重复读,一个事务先后读取同一条数据,前后结果不一致。

3. 幻读(已经解决掉不可重复读的问题),一个事务查找一条指令时,没查到结果,但当他插入时插入失败,再次查询时仍没有查询到该数据(第二次查找仍没有数据是因为以保证了不可重复读);

解决办法:对事务进行隔离。

MySQL的隔离级别

未提交读————三个问题都解决不了,安全度太低,开发中一般不用

读已提交————可以解决脏读,其他两个问题无法解决

可重复读————可以解决脏读和不可重复度————MySQL默认的

串行化—————三个问题都可以解决,但是就不能进行多线程操作,安全性最高,但性能太低,开发中一般不使用。

undo log和redo log的区别?

redo log是物理日志,记录的是数据页发生的变化,服务器宕机可用于恢复数据

undo log是逻辑日志,当事务进行回滚时,通过逆操作来恢复原来的数据

redo log用于保证事物的持久性,undo log用于保证事物的一致性和原子性。

事务中的隔离性是如何保证的?

1. 加锁(排他锁),在进行delete,update,insert等操作时,都会使用排他锁。

2. mvcc:多版本并发控制————维护一个数据的多个版本,以保证读写数据没有冲突。

数据库的主从同步如何实现的?

核心是:二进制binlog文件(存储DDL(不包括show)和DML(不包括select))。

1. 主库在提交事务是,将数据的变更放在二进制文件binlog中。

2. 从库读取主库的二进制文件binlog,写入到从库的中继日志Relay Log中。

3. 从库重做中继日志中的文件,将改变反映他自己的数据。

数据库的分库分表?

1. 水平分库:将一个库的数据拆分到多个库中。(每个库中的表可能是相同的,但存储的数值范围有所差异)

2. 水平分表:将一个表的数据拆分到多个表中(可以是在同一个库中)

3. 垂直分库:以表为依据,根据业务将不同的表拆分到不同的库中。(微服务中常用)

4. 垂直分表:以字段为依据,根据字段属性将不同的字段拆分到不同的表中。

    拆分规则:1. 将不常用的字段拆分出来。

                      2. 将一些大的文本内容或者是二进制文件进行拆分。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值