一. 实验内容、步骤以及结果

假设学校允许学生将银行卡和校园卡进行绑定,在student数据库中有如下的基本表,其中校园卡编号cardid即为学生的学号:

icbc_card(studcardid, icbcid, balance) //校园卡ID,工行卡ID,银行卡余额
campus_card(studcardid, balance)    //校园卡ID,校园卡余额

本实验中的部分示例数据

create table icbc_card(
icbcid int,
sno varchar(8),
balance int
);
create table campus_card(
sno varchar(8),
balance int
);
insert into campus_card values ('20200032', 1);
insert into campus_card values ('20200033', 100);
insert into icbc_card values (1, '20200032', 300);insert into icbc_card values (2, '20200033', 400);

针对以上数据库按照要求完成下列实验:

1. 编写一个事务处理实现如下的操作:某学号为20200032的学生从银行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(10分)

DELIMITER $$
USE `student`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `zhuanzhang`()
BEGINdeclare bank_card_balance int default 0;select balance from icbc_card where sno = '20200032' into @bank_card_balance;if @bank_card_balance>200 thenupdate icbc_card set balance = balance + 400 where sno = '20200032';update campus_card set balance = balance + 200 where sno = '20200032';commit;elserollback;end if;
END$$Call zhuanzhang;

可以看到学号为20200032的学生银行卡账户少了200,且对应的校园卡账户增加了200.

2. 针对本题的数据库和表,分别用具体的例子展现几种数据不一致问题:如丢失修改、读脏数据、不可重复读和幻读(删除和插入),注意如有无法展现的情况,请说明原因。(20分,每种数据不一致10分)

(1) 丢失修改

此时隔离级别为repeatable-read

(2) 读脏数据

此时隔离级别为read-uncommitted

(3) 不可重复读

此时隔离级别为read-committed

(4) 幻读(删除和插入)

此时隔离级别为read-committed

3. 利用数据库的隔离级别或者锁机制等,设计方案分别解决上述丢失修改、读脏数据、不可重复读、幻读的数据不一致问题。(20分,每种数据不一致5分)

(1) 丢失修改

set transaction isolation level serializable;
show variables like 'transaction_isolation';

此时隔离级别为repeatable-read

(2) 读脏数据

set transaction isolation level read-commited;
show variables like 'transaction_isolation';

此时隔离级别为read-committed

(3) 不可重复读

此时隔离级别为repeatable-read

(4) 幻读(删除和插入)

此时隔离级别为repeatable-read

4. 构造两个事务同时更新一条数据,尝试使用以下SQL命令查看和理解当前系统中事务以及锁的状态等信息。(10分)

show engine innodb status (MySQL 8.0 or 5.7)select * from information_schema.innodb_trx  (MySQL 8.0 or 5.7)select * from performance_schema.data_locks; (MySQL 8.0)select * from sys.innodb_lock_waits; (MySQL 8.0)select * from information_schema.innodb_lock_waits (MySQL 5.7)select * from information_schema.innodb_locks (MySQL 5.7)

5. 构造一个出现死锁的情形。(10分)

6. 构造含有savepoint的事物,并在某时刻回滚到某个savepoint。(10分)

start transaction;
insert into icbc_card values(1,'20200034',200);
insert into icbc_card values(2,'20200035',500);
savepoint s1;
insert into icbc_card values(3,'20200036',200);
insert into icbc_card values(4,'20200037',500);
savepoint s2;
insert into icbc_card values(5,'20200038',200);
insert into icbc_card values(6,'20200039',500);
select * from icbc_card;

完成所有的插入icbc_card中的数据:

rollback to savepoint s2;
select * from icbc_card;

回滚到s2后icbc_card中的数据:

rollback to savepoint s1;
select * from icbc_card;

回滚到s1后icbc_card中的数据:

rollback;
select * from icbc_card; 

回滚所有的后icbc_card中的数据:

7. 通过实验查看mysql中的各种日志:查询日志、错误日志、慢查询日志。(10分)

1) 查询日志:

默认关闭,需要自行打开

Set global general_log = on;
Show variables like ‘%general_log%’

2) 错误日志:

错误日志的位置在C:\ProgramData\MySQL\MySQL Server 8.0\Data,默认以 $HOSTNAME.err 为文件名称。

3) 慢查询日志:

错误日志的位置在C:\ProgramData\MySQL\MySQL Server 8.0\Data,默认以 $HOSTNAME-slow.log 为文件名称。

8. 用mysqlbinlog查看数据库的事务日志,并尝试按照以下场景进行数据恢复。(10分)

  • 操作步骤:

  • 1)建立db1,建立t1、t2表。t1、t2表结构:create table t1(id int);

  • 2)向t1插入数据:11,12, 13 3)向t2插入数据:21, 22, 23

  • 3)drop table t1;

  • 4)t2还可以正常使用,给t2插入数据24

在以上第4步的操作之后,利用mysqlbinlog恢复t1的数据。

以上4个步骤的SQL如下:

 create database db1;create table t1(id int);create table t2(id int);insert into t1 values(11);insert into t1 values(12);insert into t1 values(13);insert into t2 values(21);insert into t2 values(22);insert into t2 values(23);drop table t1;insert into t2 values(24);
  1. 首先创建新的binlog日志文件
flush logs;
show master status;
  1. 然后执行上方的代码

  2. 然后查看binlog文件

show binlog events in 'DESKTOP-LMI9M9U-bin.000012';

可以看到start position = 156,stop position = 1278

  1. 使用命令行工具将binlog文件中的sql语句导出(需要使用管理员权限)
mysqlbinlog --start-position=156 --stop-position=1278 DESKTOP-LMI9M9U-bin.000012>C:\test000022.sql
  1. 导入sql文件
    经查询,已恢复

二. 实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)

在备份数据库时出现了命令行中无法实施mysqlbinlog工具,最后将环境变量进行添加,并且使用管理员权限打开cmd后成功运行,得以完成实验。

《数据库原理》实验报告DB7——事务与并发控制相关推荐

  1. 【数据库原理实验(openGauss)】事务与并发控制

    事务与并发控制 文章目录 事务与并发控制 一.事务 (1)事务的ACID特性 (2)事务管理 (3)事务实例 1.未提交的事务 2.已提交的事务 二.并发控制 (1)加锁语法 (2)加锁实例 一.事务 ...

  2. mysql的触发器实验报告_数据库原理实验报告s11-数据库触发器的创建.doc

    数据库原理实验报告s11-数据库触发器的创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计 ...

  3. mysql数据库原理实验报告_数据库原理实验报告(Mysql).doc

    数据库原理实验报告(Mysql).doc 实验项目列表 序号实验项目名称指导教师1实验一 数据库的定义实验(验证性)2实验二 数据库的建立和维护实验(验证性)3实验三 数据库的查询实验(验证性)4实验 ...

  4. 数据库原理实验报告【全集】

    如果对你有帮助,记得点赞哦! 实验1~8:SQL Server 2008的安装及管理工具的使用.SQL Server数据库的管理.SQL Server数据表的管理.数据查询.索引和视图.数据完整性.T ...

  5. 数据库原理实验报告5

    接上次的实验,本次主要练习数据查询由于上次做的比较多,所以本次实验的一些题目在上一次实验报告就已经发布了 首先这次实验是本学期第一次在学校机房做,开始不太习惯,导致有一些截图不是很完整,好在最终还是明 ...

  6. mysql数据完整性实验报告,数据库原理实验报告(Mysql)

    图5 course表 图6 sc表 图7 course的约束条件 图8 sc的约束条件 3.利用命令方式建表: (1).单击"查询",然后点击"新建查询",在弹 ...

  7. 数据库原理实验报告(一)

    答案在后面 一.在studentdb中创建架构Production和Person并比较区别. create schema Production --架构命名不能以数字开头 create schema ...

  8. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

  9. 数据库原理实验二 数据库管理 实验报告

    广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...

最新文章

  1. IOS开发笔记3-C语言基础复习
  2. ​每日一皮:​入职新公司第一周的感受...
  3. Python语言编程之LEGB变量作用域法则
  4. Codeforces-712C-Memory and De-Evolution
  5. BZOJ2809 dispatching 【可并堆】
  6. keyloadtool_phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引
  7. OSChina 周日乱弹 —— 七哥的北漂日记
  8. Fastlane为iOS带来持续部署
  9. db2存储过程手动执行没有问题_轻松解决DB2创建存储过程时遇到的错误
  10. 计算机三级之嵌入式系统学习笔记7
  11. java 类继承命名_Java 语言的类间的继承关系是( )。_学小易找答案
  12. qmainwindow 标题栏_QMainWindow菜单栏和工具栏
  13. HDU2109 Fighting for HDU【排序】
  14. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  15. 学习Java开源框架前你应该了解的
  16. 吴恩达深度学习课后作业-目标检测的环境配置
  17. SpringBoot构建电商基础秒杀项目
  18. JWT 的退出登录方法
  19. 支付宝支付 接口配置
  20. struts2类型转换和验证

热门文章

  1. WinXPSP2:IE浏览器加载项管理(转)
  2. Lua和Luajit的优势和不足(1)
  3. 二维码的识别过程以及柱体二维码的实际应用情况调研报告
  4. Android菜鸡的提升之路---自闭症儿童游戏的实现
  5. RoadFlow项目架构分析
  6. 实习广场投递简历分析
  7. 计算机系双选会方案,【毕业生双选会筹备方案12篇】_毕业生双选会筹备方案范文大全_2021年毕业生双选会筹备方案_东城教研...
  8. 视频教程-Web前端从初级到高手之路-其他
  9. Jquery简单实现2048小游戏
  10. 百度地图获取行政范围边界