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 隔离级别

#MySQL#
全部评论
听这么一讲,瞬间明白了
点赞 回复 分享
发布于 2022-08-26 20:38 陕西

相关推荐

点赞 评论 收藏
分享
HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
1 4 评论
分享
牛客网
牛客企业服务