栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第五章 数据库设计和事务 ② 代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第五章 数据库设计和事务 ② 代码

第五章 数据库设计和事务 ② 代码
  • 事务管理
    • 数据库事务的原理
  • MySQL事务隔离级别
    • 1.Read Uncommitted(未提交读) ru
    • 2.Read Committed(提交读)rc
    • 3.Repeatable Read(可重复读)rr
    • 4.Serializable(可串行化)
  • 问题
    • 1.脏读
    • 2.幻读

事务管理 数据库事务的原理
#创建银行帐号表
create table bank
(
		bid int primary key auto_increment,
		account varchar(20),
		money int
);

select * from bank;

insert into bank
(account,money)
values
('张三',10000),
('李四',10000);

select * from bank;

#手动开启事务
start transaction;

update bank
	set money=money-1000
where account='张三';

select * from bank;

#突然出错
#回滚事务
#rollback;  #只能执行一次,回滚之后手动事务就结束了。

select * from bank;

update bank
	set money=money+1000
where account='李四';

#手动提交事务
commit;

select * from bank;

代码仅供参考

MySQL事务隔离级别 1.Read Uncommitted(未提交读) ru
#事务a
#设置事务为未提交读
set session transaction isolation level read uncommitted;
#开始手动事务
start transaction;
#更新数据
update classInfo
set className='111'
where classId=1;
#回滚事务
rollback;

select * from classInfo

#事务b:在另外一个脚本中运行
set session transaction isolation level read uncommitted;
select * from classInfo where classId=1
2.Read Committed(提交读)rc
#事务a
#设置事务隔离级别为提交读
set session transaction isolation level read committed;
#开启手动事务
start transaction;
#在事务中第一次查询数据
select * from classInfo where classId = 1;
#在事务中第二次查询数据
select * from classInfo where classId =1;
#提交事务
commit;

#事务b(在另外一个脚本中执行)
set session transaction isolation level read committed;
start transaction;
update classInfo
set className='111'
where classId = 1
commit;

3.Repeatable Read(可重复读)rr
#事务a
#设置事务隔离级别为可重复读
set session transaction isolation level repeatable read;
#开启手动事务
start transaction;
#查询编号为10的班级
select * from classInfo where classId=10;
#插入班级编号为10的班级
insert into classInfo
(classid,className)
values
(10,'AAA10');
#提交事务
commit;

select * from classInfo

#事务b(在另外一个脚本中上运行)
set transaction isolation level repeatable read;


#开启手动事务
start transaction;
#插入编号为10的班级
insert into classInfo
(classId,className)
values
(10,'AAA10');
#提交事务
commit;

4.Serializable(可串行化)
#事务a
#设置事务隔离级别为可重复读
set session transaction isolation level serializable;
#开启手动事务
start transaction;
#查询编号为10的班级
select * from classInfo where classId=10;
#插入班级编号为10的班级
insert into classInfo
(classid,className)
values
(10,'AAA10');
#提交事务
commit;

​#事务b(在另外一个脚本中上运行)
set transaction isolation level serializable;


#开启手动事务
start transaction;
#插入编号为10的班级
insert into classInfo
(classId,className)
values
(10,'AAA10');
#提交事务
commit;
问题 1.脏读
#解决脏读问题,提升数据库库隔离级别

#事务a
#设置事务为提交读
set session transaction isolation level read committed;
#开始手动事务
start transaction;
#更新数据
update classInfo
set className='111'
where classId=1;
#回滚事务
rollback;

select * from classInfo
#将事务隔离级别提升为提交读

#事务b:在另外一个脚本中运行
set session transaction isolation level read committed;
select * from classInfo where classId=1
2.幻读
#事务a
#设置事务隔离级别为提交读
set session transaction isolation level repeatable read;
#开启手动事务
start transaction;
#在事务中第一次查询数据
select * from classInfo where classId = 1;
#在事务中第二次查询数据
select * from classInfo where classId =1;
#提交事务
commit;

select * from classInfo;
#事务b(在另外一个脚本中执行)
set session transaction isolation level repeatable read;
start transaction;
update classInfo
set className='111'
where classId = 1
commit;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号