SQL事务

SQL事务(transaction)

1.事务的含义

​ 由一个或多个sql语句的组成,每个sql语句都是相互依赖的,是不可分割的,但事务中的sql语句只会存在都执行或都不执行(当事务中的sql语句执行失败,数据库数据就会回滚到执行前的状态,当所有的语句执行成功才代表这个事务执行成功)

2事务的四大特性

2.1原子性:

​ 事务是一个不可分割的最小单位,事务中的操作只存在都发生与都不发生在两种情况

2.2一致性:

​ 事务只会使数据库从一个一致状态转换为另一个一致状态,其它事务只会查看或操作到这个事务执行前或执行后的一致状态,不会查看或操作事务执行的中间状态

2.3隔离性:

​ 事务的执行是独立的,一个事务的执行是不能被其它事务干扰的,两个或多个并发执行的事务的操作与数据是与其他事务隔离的,并发事务之间的执行是不能互相干扰的

2.4持久性:

​ 一旦事务执行或操作成功后,其对数据的改变时永久的,接下来的操作与故障是对其无影响的

3.事务的分类

3.1显式事务

​ 手动使用begin开始一个事务,再输入一个或多个sql语句,一次执行,当其中的sql语句都执行成功,则使用commit提交语句,当其中的sql语句执行出错则使用rollback回滚到事务执行前的状态

3.2隐式事务

​ 在开启隐式事务时,当用户输入一条sql语句时,数据库便会自动为其创建一个事务,当sql语句执行成功,数据库便会自动提交这个事务,若执行失败则回滚到事务执行之前的状态。

3.3两种事务的区别

​ 显式事务可以执行一组sql语句,用户可以精确控制事务执行,但比隐式事物的执行所需要的代码更多,更适用进行一组操作,隐式事务提供更简洁的代码与操作方式,更适合单个操作。性能方面,显示事务需要更多的资源来维护事务的状态与锁定机制,但隐式事务更轻量,适用与高并发与大规模操作场景。

4.事务并发时出现的问题分类

​ 事务的执行时间不是有序的,多个事务有可能在同一时刻进行执行,多个事务对一张表进行并发操作时,就会出现这些并发问题。

4.1脏读(读取到更新失败的数据):

​ 当两个事务T1、T2,T1读取的是T2更新但未提交的数据,当T2失败进行回滚时,T1读取的就是无效的数据

4.2不可重复读(两次分别读取字段内容不一致):

​ 当两个事务T1、T2,T1事务中存在两次读取同一个字段的操作,但在T1读取完第一次后,并发的T2对这个字段进行了修改,当T1执行第二次读取时获取到的值就不一样,也就造成两次读取值不相同的情况,造成了不可重复读的后果

4.3幻读(两次分别读取字段数量不一致):

​ 当两个事务T1、T2,T1事务中存在两次读取同一个字段的操作,当T1在读取完第一次后,并发的T2增加或删除字段,会造成T1第二次读取到的值行数比第一次多或者少,就会产生幻读的情况。

5.事务的隔离级别

5.1read uncommited(读未提交数据):

​ 允许事务读取未提交的变更(会出现脏读、幻读、不可重复读)

5.2read commit(读已提交数据):

​ 只允许事务读取提交的变更(会出现幻读、不可重复读)

5.3repeatable read(可重复读):

​ 允许这个事务多次读取一个字段数据,但在读取数据期间,禁止其它事务对这个字段的修改(update)(会出现幻读)

5.4serializable (串行化):

​ 允许一个事务多次对表进行读取,但在这个事务执行期间,禁止其它事务对数据进行增减修改。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值