数据库之事务介绍

事务

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

事务原理

1.DOS命令行(客户端)输入mysql用户名密码.

2.MySQL软件校验用户名密码,登录成功为当前用户创建一个临时的日志文件.

3.默认情况下,一条SQL语句就是一个独立的事务,直接将数据同步到磁盘文件.

4.手动开启事务后,相当于告诉数据库,后续所有的SQL操作都先进入临时日志文件.

5.后续的所有操作都先进入日志文件中,在日志文件中,操作的仅仅是过程而不是数据库,如果执行了rollback操作,则直接清空所有日志文件,若执行commit语句,将sql语句批量同步到磁盘上的数据库文件,再清空临时日志文件.

事务日志的用途

事务日志可以帮助提高事务的效率.

事务日志采用的是追加方式,因此写日志的操作是磁盘上一小块区域的顺序IO,而不像随机IO需要磁盘在多个地方移动.所以采用事务日志的方式相对来说要快的多,事务日志持久后,内存中的修改在后台慢慢的刷回磁盘.期间如果系统发生崩溃,存储引擎在重启的时候依靠事务日志自动恢复这部分被修改数据

事务特性

  1. 原子性:A atomicity
    如果一个包含多个步骤的业务操作,被事务管理,那么这些步骤要么同时成功,要么同时失败。
  2. 一致性:C consistency
    数据在事务的执行前后,保证它的完整一致
  3. 隔离性:I isolation
    多个事务之间,相互独立互不干扰
  4. 持久性:D durability
    事务一旦成功提交,同步到数据库磁盘文件,不可逆。

事务的隔离性

多个事务之间是隔离的,相互独立的。但是如果多个事务同时操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

  1. 脏读:一个事务中,读取到另一个事务未提交的数据
  2. 不可重复读:一个事务中,两次读取的内容不一致(update)
  3. 幻读:一个事务中,两次读取的数量不一致(insert、delete)

MySQL数据库隔离级别

级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交read uncommitted
2读已提交read committedOracle和SQL Server
3可重复读repeatable readMySQL
4串行化serializable

数据库性能:1>2>3>4

数据库安全:4>3>2>1

综合考量:2、3

mysql默认的是可重复读,可重复读跟mysql的存储引擎有关系.InnoDB中有一种技术叫MVCC,具体MVCC机制请见:
https://blog.csdn.net/numbbe/article/details/109300087

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值