SQL事务

数据库事务确保了数据操作的原子性、一致性、隔离性和持久性,即使在异常或并发情况下也能保证数据的正确性。事务包括自动和手动提交,其原理涉及事务日志和提交确认。在并发操作中,不同的隔离级别可以防止多种并发异常,如脏读、不可重复读和幻读。了解并设置事务隔离级别是确保数据库稳定性的关键。
摘要由CSDN通过智能技术生成

概述

数据库事务是访问并可能操作各种数据项的一个数据库操作(包括读、写)序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

例如:银行转账。核心操作包括更新一个账户减去转账金额,更新另一个账户加上转账金额,要求要同时成功或同时失败。

目的

1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

总结:事务的目的就是要提供3种方法:1、失败恢复方法。 2、保持一致性的方法。3、操作隔离的方法。

成功情况下:

能将数据从一种状态变为另一种状态,并能够持久化。

异常情况下

1、能将数据恢复到正常状态。
2、要能保证一致性,包含数据的一致性和约束的一致性。

并发情况下

并发的操作之间不能产生相互影响。

事务特性

事务包括ACID四个特性,分别是原子性、一致性、隔离性、持久性。

1、原子性(Actomicity)

表示一个事务内的所有操作是一个整体,是一个不可分割的工作单位,要么全部成功,要么全部失败。

2、一致性(Consistency)

事务前后数据的完整性必须保持一致。

3、隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

4、持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

操作事务

在数据库中,一个事务可以由多条SQL语句组成,当然一个事务中也可以只包含一条SQL语句。
MYSQL中可以有两种方式进行事务的操作:1、自动提交事务。2、手动提交事务。

1、自动提交事务

MySQL的每一条DML(增删改)语句都是一个单独的事务,MySQL默认情况下,在执行每条语句时都会自动开启一个事务,执行完毕自动提交事务。
在这里插入图片描述

2、手动提交事务

事务有关的SQL语句
在这里插入图片描述
示例1:

start transaction; --开启事务
update emp set name='李四' where id=10; -- 更新数据

在没有提交事务时,数据库中的数据不会真正的发生变化

在这里插入图片描述

commit;-- 提交事务

事务提交后,数据库中的数据才会真正的变化


start transaction; --开启事务
update emp set name='王五' where id=10; -- 更新数据

如果不提交事务,而是回滚事务,数据库中的数据将不会变化
rollback;

3、事务的原理

事务开启之后, 所有的操作都会临时保存到事务日志, 事务日志只有在得到commit命令才会同步到数据表中,其他任何情况都会清空事务日志(rollback,断开连接)
在这里插入图片描述

事务的并发异常

在事务并发操作时(例如多个客户端来操作同一个数据库中的同一张表)。可能会出现如下的问题。
在这里插入图片描述
当然这些并发的异常可以说是由数据库的隔离级别引起的,或者说通过调整数据库的隔离级别可以防止以上并发异常的发生。

隔离级别

数据库的事务隔离级别主要包括:读未提交(Read Uncommitted)读已提交(Read Committed)可重复读(Repeatable Read)串行化(Serializable)。隔离级别越高,数据库的效率就越低。

MySQL数据库InnoDB存储引擎(默认)的默认隔离级别是Repeatable Read
Oracle数据库默认的隔离级别是Read Committed

  • 各种隔离级别能解决哪些并发异常
    在这里插入图片描述

隔离级别的查看和修改

(1)、Mysql8以前版本
查看

select @@session.tx_isolation

修改

set @@session.tx_isolation='隔离级别'

(2)、Mysql8
查看

select @@session.tx_isolation

修改

set session transaction isolation level 隔离级别

示例
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值