【MySQL篇】MySQL事务概述

MySQL事务(Java线程)

一、事务简介
  • 数据库事务是一种机制、一种操作序列,包含一组数据库操作命令。
  • 事务把所有命令作为一个整体,同时向系统提交或撤销操作请求。即这一组数据库命令要么同时成功,要么同时失败。
  • 事务是数据库操作的最小逻辑单元。
二、关于事务的命令
开启事务
-- START TRANSACTION;
BEGIN;
提交事务
COMMIT;
回滚事务
ROLLBACK;
查看事务提交方式
-- 默认是自动提交
-- 1.自动提交	0.手动提交
select @@autocommit;
修改事务提交方式
-- 修改事务提交方式为手动提交
set@@autocommit = 0;
三、事务案例
-- 创建一个account表
DROP TABLE if EXISTS account;
CREATE TABLE account(
  id INT PRIMARY KEY auto_increment,
	name varchar(10),
	money double(10,2)
);

-- 插入两条数据
INSERT INTO account(name, money) values ('张三', 1000),('李四', 1000);


-- 转账操作
-- 1. 查询李四账户金额是否大于500
select * from account where name = '李四';


-- 2. 李四账户 -500
UPDATE account set money = 500 where name = '李四';

-- 出现异常了...

-- 3. 张三账户 +500
UPDATE account set money = 1500 where name = '张三';

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

-- 转账出现异常的时候,可以使用rollback回滚事务,避免资金出现异常
四、事务四大特征(ACID)(MySQL面试必问)
  • 原子性(atomicity):事务是逻辑上不可分割的最小操作单位,要么同时成功,要么同时失败,对于一个事务来说不可能只执行其中的一部分

原子性描述的是事务本身是最小的工作单元。

  • 一致性(consistency):事务完成时,必须使所有的数据都保持一致状态

一致性描述的是事务完成之后数据的状态,需要保持一致,可以认为原子性是因,一致性是果

  • 隔离性(isolation):针对事务并发,隔离性就是要隔离并发运行的多个事务之间的相互影响,一般来说一个事务所做的修改在最终提交前,对其他事务是不可见的。

例如在Navicat和cmd中同时开启事务,先在Navicat中李四向张三转账500,查询结果,转账成功。此时,在cmd中,李四再向张三转账500,则会提示error,事务之间互相影响的程度就叫事务的隔离性。

  • 持久性(durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的,此时即使系统崩溃,修改的数据也不会丢失
五、并发事务问题
  • 脏读一个事务读到另一个事务还没有提交的数据

image-20221010194707142

比如B读到了A未提交的数据。

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

image-20221010195156332

事务A两次读取同一条记录,但是读到的数据却是不一样的。

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

image-20221010195406392

六、事务隔离级别
隔离级别脏读不可重复读幻读
Read uncommitted 未提交读
Read committed 已提交读×
Repeatable Read(默认) 可重复读××
Serializable 可串行化×××
七、查看事务隔离级别
-- 查看事务隔离级别 (mysql 默认是可重复读)
SELECT @@TRANSACTION_ISOLATION;
八、设置事务隔离级别
-- SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
-- READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

注意:事务隔离级别越高,数据越安全,但是性能越低。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Steph Wae

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

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

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

打赏作者

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

抵扣说明:

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

余额充值