MySQL事务笔记

什么是事务呢?

答:我们把一些SQL语句放在一起,这些语句要么同时成功要么同时失败
读概论可能不明白

我们来举例子:
例如银行转账,张三账号里面有1000块钱,李四账号里面也有1000块
这时张三打电话个李四说你欠我的钱什么时候还啊,李四突然想起来上个星期找他借了500还没有还给他,李四立马回到:马上我这就去银行给你转账过去

– 创建用户表
create table user (
id int primary key auto_increment,
name varchar(50),
pice float(8,2)
);
– 条件张三和李四用户
insert into values user(1,‘张三’,1000),(2,‘李四’,1000);
– 现在进行转账操作
update user set pice = pice - 500 where id = 1;
update user set pice = pice + 500 where id = 1;
这样的话张三的账号就少了500李四的账号就多了500这样一个转账就完美成功了
可惜天下没有绝对完美的事情,真的这时候 我们发现这两个过程中突然被黑客插入了一些异常
啊哈当李四的账号-500时异常发生了,那么异常发生了下面的代码就不能去执行了,李四个张三转账500自己账号里面-了500他的账号
里面没有+500,这个就很难受了…

我们怎么去预防这种事情发生呢?
这时候事务这种东西就有作用了
我们来看看事务是什么:事务就是 一堆SQL语句放在一起要么同时成功要么同时失败
你想 如果把转账操作放在一个事务里面 如果一个不成功 那么就是失败,需要成功则一个到位不能失败
好了 这就是事务!!!
在MySQL里面如何去搞这个事务呢?
很简单
这里注意:MySQL里面的事务是自动提交了 你每写一个DML语句 他都会自动提交

– 1.开启事务
start transaction
– 2.写DML语句
– 3.发现异常回滚事务,上面操作全部被清除
rollback
注意:
– 设置保存点 去回滚
– 如何设置保存点
savepoint textsacepoint;
rollback to textsacepoint;
– 4.提交事务
commit
一个简单的事务就是这样:
start transaction
update user set pice = pice - 500 where id = 1;
update user set pice = pice + 500 where id = 1;
commit

事务里面有四个特性

①原子性:事务的最小单位要么同时成功,要么同时失败
②一致性:事务的操作前后,总量不变
③隔离性:一个事务不能去影响另一个事务
④持久性:一个事务一旦提交就放在磁盘里面就永久存在

事务的隔离级别:

有四个级别 这四个级别从小到大越来越安全,但是效率越来越低
1.read uncommitted :读未提交
这个事务可以 发生好多问题:脏读,不可重复读,化读
2.read committed :读以提交[Orack这里是默认的级别]
这个事务解决了脏读
3.repeattable read :可重复读[MySQL里面默认的是这个级别的]
这个事务解决了 不可重复读
4.serializable :串行化[如果一个事务设置了这个隔离级别 那么必须等待这个事务结束才能放]
这是事务解决了 化读

脏读是什么情况:
一个事务还没有提交,另一个事务就可以访问未提交的数据
玩LOL的都知道 这辈子最讨厌的就那些脏兵的,说着是清线…这个明显就是脏读
不可重复读:一次事务里面的数据 每次去查询方式了变化
化读:一个事务的(DML)数据表的中的所有记录,另一个事务添加一条数据,则第一个事务查询不到自己的修改 [这里MySQL不支持]

查看事务的隔离级别:
select @@tx_isolation
设置事务的隔离级别
set global transaction isolation level 隔离级别

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值