智能2112杨阳
一、目的与要求:
1.熟悉提交事务
2.回滚事务
3.检查点技术
注:可以用可视化软件来实现
二、内容:
基于现有数据库设计事务提交、事务回滚、及检查点实验,观察比较提交前后执行结果并分析。
源码:
事务提交:
set role Salor;
show databases;
1、INSERT into fruits VALUES('c1',106,'strawberry',8.80,1000);
2、INSERT into fruits VALUES('c2',103,'yellow peach',9.90,1000);
set autocommit=0;
3、INSERT into fruits VALUES('c2',103,'yellow peach',9.90,1000);
set autocommit=0;
COMMIT
事务回滚:
INSERT into fruits VALUES('c2',103,'yellow peach',9.90,1000);
select * from fruits;
ROLLBACK
set autocommit=0;
COMMIT
检查点:
select * from fruits;
SAVEPOINT a;
INSERT into fruits VALUES('c4',103,'yellow peach',9.90,1000);
ROLLBACK to a;
锁:
lock table fruits read;
unlock tables;
select * from fruits lock in share mode;
select * from fruitshop.fruits for update;
运行测试结果截图:
事务提交:
1、
2、
3、
事务回滚:
检查点:
锁:
解释原因:
set autocommit=0后,事务无法提交,必须手动提交才能成功提交
结论:
set autocommit=0后,若想成功提交事务,需要手动输入commit才能成功提交
三、小结
1.遇到的问题及解决过程
问题:设置autocommit=0后无法提交
解决过程:学习相关语法后手动输入COMMIT成功提交
- 产生的错误及原因分析
错误:回滚失败
原因分析:回滚应在提交之前,否则无法成功回滚
3.体会和收获。
本次博客学习和了解了事务设计和锁的相关知识及应用,让我对数据库和mysql语句的使用更加得心应手,能将所学知识用于解决实际问题,总的来说收获满满。
附:
set role 角色名; 作用是当前帐号生效
set autocommit=0; 关闭自动提交
show databases; 查看所有数据库
show grants; 查看当前用户权限
COMMIT; 事务提交
ROLLBACK; 回滚
SAVEPOINT a; 插入检查点,a表示检查点标签
ROLLBACK to a; 回滚到检查点a