MySQL的事务与事务隔离级别

目录

一、什么是事务

二、MySQL实现事务的步骤

三、事务的四个原则(ACID)

四、MySQL实现事务的隔离性

五、事务的并发问题

六、事务的隔离级别

七、事务的隔离级别解决的问题

八、好好学习,天天向上


一、什么是事务

        事务(Transaction),是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行。

二、MySQL实现事务的步骤

        关闭MySQL自动提交                                    SET   AUTOCOMMIT = 0;

        开启一个事务,标记事务的起点                   START   TRANSACTION;

        向数据库提交事务                                        COMMIT;

        将事务回滚,所有的数据库操作被取消        ROLLBACK;

        开启MySQL自动提交                                   SETAUTOCOMMIT = 1; 

# 事务
-- 创建表
create table bank(
	bid int PRIMARY key auto_increment,
	bname varchar(10),
	bmoney decimal(20,2)
);
-- 添加数据
insert into bank(bname,bmoney)
values('张三',5),('李四',1000);

update bank set bmoney=1000
where bname='李四';
update bank set bmoney=5
where bname='张三';

select * from bank;
-- 关闭自动提交
set autocommit = 0;
-- 开启事务
start transaction;
-- 一组sql语句
update bank set bmoney=bmoney-100 where bname='李四';
update bank set bmoney=bmoney+100 where bname='张三';
-- 事务的结束
-- 提交
commit;
-- 回滚
rollback;
-- 开启自动提交
set autocommit = 1;

三、事务的四个原则(ACID)

        1.原子性(Atomic):数据库中的事务执行,不可再分,整个语句要么执行,要么不执行

        2.一致性(Consist):事务开始前和事务结束后,数据库的完整性约束吗,没有被破坏

        3.隔离性(Isolated):事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,

                                        中间某一时刻的数据

        4.持久性(Durable):事务完成以后,该事务对数据库所做的更改便持久的保存在数据库

                                        之中,并不会被回滚

四、MySQL实现事务的隔离性

        通常数据库里都是采用锁的机制,保证事务之间的隔离性。

五、事务的并发问题

        脏读:指一个线程中的事务读取到了另一个线程中未提交的数据

        不可重复读:指一个线程中的事务读取到了另外一个线程中提交的update数据

        幻读:指一个线程中的事务读取到了另一个线程中提交的insert数据

六、事务的隔离级别

          1. READ_UNCOMMITTED        读未提交

          2. READ_COMMITTED             读提交(不可重复读)

          3. REPEATABLE_READ            可重复读

          4. SERIALIZABLE                      串行化

七、事务的隔离级别解决的问题

        1. READ_UNCOMMITTED

                事务读取:不加锁。

                事务写入:加写锁。

                解决问题:脏写。

                存在问题:脏读、不可重复读、幻读。

        2. READ_COMMITTED

                事务读取:加读锁(每次select完成都会释放读锁)。

                事务写入:加写锁。

                解决问题:脏写、脏读。

                存在问题:不可重复读、幻读。

         3. REPEATABLE_READ   

                事务读取:加读锁(每次select完不会释放锁,而是事务结束后才释放)

                        (如果是mysql的innodb还会加间隙锁)。

                事务写入:加写锁。

                解决问题:脏写、脏读、不可重复读、幻读(如果是mysql的innodb则已解决)。

                存在问题:幻读(如果是mysql的innodb则已解决)。

        4. SERIALIZABLE

                不管读取还是修改所有的事务串行化执行,一个事务的执行必须等其他事务结束。

八、好好学习,天天向上

        good good study , day day up!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

..Zhou

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值