Mysql事务,傻瓜式教学。

Mysql事务

事务:事务中的语句要么全部执行,要么全部不执行

1.事务操作

开始事务
BEGIN 或者 START TRANSACTION
提交事务 (控制事务)
COMMIT
回滚事务(出错进行回滚)
ROLLBACK

事务一切正常的情况下 提交所有数据都被插入成功

start transaction

insert into user (uid,uname,uage) VALUES(001,'张三',18);
insert into user (uid,uname,uage) VALUES(002,'李四',19);
insert into user (uid,uname,uage) VALUES(003,'王五',18);
COMMIT;
SELECT * from user;

在这里插入图片描述

当事务中出现错误,强行提交只能提交上出错之前的数据

start transaction

insert into user (uid,uname,uage) VALUES(004,'张三',18);
insert into user (uid,uname,uage) VALUES(005,'李四',19);
insert into user (uid,uname,uage) VALUES(003,'王五',18);
insert into user (uid,uname,uage) VALUES(006,'李四',19);

COMMIT;
SELECT * from user;

在这里插入图片描述

出错后使用回滚回回到初始位置,及时提交也不会有结果插入

start transaction

insert into user (uid,uname,uage) VALUES(004,'张三',18);
insert into user (uid,uname,uage) VALUES(005,'李四',19);
insert into user (uid,uname,uage) VALUES(003,'王五',18);
insert into user (uid,uname,uage) VALUES(006,'李四',19);

ROLLBACK
COMMIT
SELECT * from user

2.事务四大特性

1. 原子性

事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

2. 一致性

事务完成时,必须使所有的数据都保持一致状态

3. 隔离性

数据库提供的隔离机制,保证事务不受并发影响单独运行

4. 持久性

事务一旦提交或者回滚,它对数据库中的数据的改变就是永久的。

3.事务并发问题

1. 脏读

一个事务读到另外一个事务还没有提交的数据

#由于mysql默认隔离级别会已经解决了脏读和不和重复读,需要进行先设置隔离级别
set SESSION transaction ISOLATION level READ UNCOMMITTED
  • 先创建两个链接

在这里插入图片描述

  • 事务一开始任务,并插入三条记录

在这里插入图片描述

  • 事务二开始任务, 查询一下user表 发现查询到了还未提交的事务

在这里插入图片描述

  • 说明发生了脏读

2.不可重复读

一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

#需要进行先设置隔离级别,此隔离级别已经解决了脏读问题(自行测试)
set SESSION transaction ISOLATION level READ COMMITTED
  • 开始事务二,查询id 为1的用户信息

在这里插入图片描述

  • 开始事务一,将uid的年龄更改为99岁,并且提交事务

在这里插入图片描述

  • 在事务二中再次查询id为1的用户信息,发现两次查询结果不一致

在这里插入图片描述

  • 说明发生了不可重复读

3. 幻读

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影

#需要进行先设置隔离级别,此隔离级别已经解决了脏读和不可重复读问题(自行测试)
set SESSION transaction ISOLATION level REPEATABLE READ
  • 开始事务一插入一条数据
    在这里插入图片描述

  • 开始事务二 查询id为4的用户

在这里插入图片描述

  • 发现为空,准备插入一条id为4的用户,发现插入失败

在这里插入图片描述

  • 说明出现幻读

4. 事务的隔离级别

在这里插入图片描述

  1. 查询隔离级别
SELECT @@TRANSACTION_ISOLATION
  1. 设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL [SERIALIZABLE| read uncommitted| read committed | serializable]

注意:事务的隔离级别越高,性能越低安全越高。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值