数据库的事务

事务一般包含三个操作:启动、提交、回滚具体语法是:

启动:start transaction; 或 begin;

提交:commit;    //不提交的话别人查询不到添加的数据

回滚:rollback;    //一键还原

只有当前数据库的引擎为Innodb才支持事务,其他类型不支持。

begin;
insert into student values(1,"小三");
commit;


begin;
insert into student values(1,"小四");
rollback;

事务会一般会产生几种并发问题:

1、脏读: 读到了没有提交的数据

2、不可重复读:读取同一个数据时候,结果不一致

3、幻读:重复查询的过程中数据发生了量的变化

不可重复读与幻读的区别在于:不可重复读,主要在于数据内容上有区别(重质),幻读在与查询数据的数量上不同(重量)。

事务拥有ACID四大特性:

1、Atomicity 原子性

事务的原子性,类似于化学中的原子,是基本单位。表现了事务是一个不可以分割的整体。具体的现象应该为要么全部做完,要么全部不做,不可能只做一半。当事务中的sql出现错误的时候,所有的操作就会回滚到事务开始之前的状态。

2、Consistency 一致性

事务的一致性,一般指事务的执行不能破坏数据库的完整性和一致性,一个事务在执行前后,数据库都应该处于一个一致性的状态。比如:当A给B转前,A的余额少了,B余额却没增加。

3、Isolation 隔离性

事务的隔离性表现在并发的环境中,两个不同的事务同时进行,他们应该是相互隔离的,互不影响的。每个事务都应该有他们完整的数据空间。

4、Duration 持久性

事务的持久性指数据一旦提交后,数据库的数据必须被永久保存。        只要数据库重启,一定会恢复到数据提交完事务之后的状态。

Isolation 事务的隔离性有四个隔离级别:

事务的隔离级别
事务隔离级别脏    读不可重复读幻   读
读未提交(read_uncommitted)允许允许允许
读已提交(read_committed)禁止允许允许
可重复读(repeatable_read)禁止禁止可能会
顺序读(serializable)禁止禁止禁止

4种隔离级别从上向下,级别越高,并发性越差,安全性越高。一般数据默认级别是读以提交或可重复读。

查询当前会话的隔离级别:mysql8之后是 select @@transaction_isolation   

                                           或者select @@tx_isolation

设置当前会话中的事务隔离级别:

                                         set session transaction  isplation level 需要设置的隔离级别

事务隔离级别实现的原因是因为不同的隔离别会有不同的锁:

1. 读未提交(RU): 有行级的锁,没有间隙锁。它与RC的区别是能够查询到未提交的数据。

2. 读已提交(RC):有行级的锁,没有间隙锁,读不到没有提交的数据。

3. 可重复读(RR):有行级的锁,也有间隙锁,每次读取的数据都是一样的,并且没有幻读的情况。

4. 序列化(S):有行级锁,也有间隙锁,读表的时候,就已经上锁了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值