
简介
为什么要隔离呢?
具体操作
S1:查看隔离级别
S2:设置隔离级别
S2-1:设置read uncommitted
S2-2:设置read committed
S2-3:设置repeatable read
S2-4:设置serializable
MYSQL事务隔离级别操作步及SQL语句汇总

在银行转账时,必须保证转账绝对安全,这时需要事务参与

update account set money = money - 200 where id = 1;
update account set money = money + 200 where id = 2;假如在第一次update之后,出现了意外、异常,没有执行第二次update,这时转账是否会出现异常?
set autocommit=0
--禁止自动提交
set autocommit=1
-- 开启自动提交 create database if not exists mydb12_transcation;
use mydb12_transcation;create table account(
id int primary key,
-- 账户id
name varchar(20),
-- 账户名
money double
-- 金额
);insert into account values(1,'zhangsan',1000);
insert into account values(2,'lisi',1000);select @@autocommit;
set autocommit = 0;begin;
update account set money = money - 200 where name = 'zhangsan';
update account set money = money + 200 where name = 'lisi';commit;rollback;set autocommit=0
--禁止自动提交
set autocommit=1
--开启自动提交
create database if not exists mydb12_transcation;
use mydb12_transcation;
-- 创建账户表
create table account(
id int primary key, -- 账户id
name varchar(20), -- 账户名
money double -- 金额
);
-- 插入数据
insert into account values(1,'zhangsan',1000);
insert into account values(2,'lisi',1000);
select @@autocommit;
set autocommit = 0;
-- 模拟账户转账
-- 开启事务
begin;
update account set money = money - 200 where name = 'zhangsan';
update account set money = money + 200 where name = 'lisi';
-- 提交事务
commit;
-- 如果转账中的任何一条出现问题,则回滚事务
rollback;4.MYSQL事务的特性

Isolate,顾名思义就是将事务与另一个事务隔离开。
如果一个事务正在操作的数据被另一个事务修改或删除了,最后的执行结果可能无法达到预期。如果没有隔离性还会导致其他问题。


读未提交(Read uncommitted) | 一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证会造成脏读 |
|---|---|
读已提交(Read committed) | 一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生,会造成不可重复读 |
可重复读(Repeatable read) | 就是在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生, 但是会造 成幻读 |
串行(Serializable) | 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。 但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用 |
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
读未提交(read-uncommitted | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
show variables like '%isolation%’; /*
set session transaction isolation level 级别字符串
级别字符串:read uncommitted、read committed、repeatable read、serializable
*/set session transaction isolation level read uncommitted;set session transaction isolation level read committed;set session transaction isolation level repeatable read;set session transaction isolation level serializable;-- 查看隔离级别
show variables like '%isolation%’;
-- 设置隔离级别
/*
set session transaction isolation level 级别字符串
级别字符串:read uncommitted、read committed、repeatable read、serializable
*/
-- 设置read uncommitted
set session transaction isolation level read uncommitted;
-- 设置read committed
set session transaction isolation level read committed;
-- 设置repeatable read
set session transaction isolation level repeatable read;
-- 设置serializable
set session transaction isolation level serializable;...
