数据库实验报告五--事务管理

备份数据库:
BACKUP DATABASE stu TO DISK=N'D:\Downloads\stu.bak'
BACKUP DATABASE stu TO DISK=N'D:\Downloads\studiff.bak' WITH DIFFERENTIAL
BACKUP LOG stu TO DISK=N'D:\Downloads\stulog.bak'
恢复数据库:
RESTORE DATABASE stu FROM DISK=N'D:\Downloads\stu.bak'
WITH REPLACE, NORECOVERY
RESTORE DATABASE st FROM DISK=N'D:\Downloads\studiff.bak'
WITH REPLACE, NORECOVERY
RESTORE DATABASE st FROM DISK=N'D:\Downloads\stulog.bak'
WITH REPLACE, NORECOVERY
​
定义事务:
事务定义:
insert into student(sno,sname) values('100','zs')
insert into student(sno,sname) values('120',15,'zs')
INSERT 语句中列的数目小于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配。
begin transaction
insert into student(sno,sname) values('108','zs')
insert into student(sno,sname) values('120',15,'zs')
commit
INSERT 语句中列的数目小于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配。
事务故障恢复
begin transaction t1
select * from course
insert into course(cno,cname) values ('11','linux')
select * from course
save transaction t1
update course set cname='linux OS' where cno='11'
(linux变为linux OS)
select * from course
rollback transaction t1
(linux OS变为linux)
select * from course
rollback
(表消失)
并发控制:
begin transaction t1
select * from course where cno='1001'
begin transaction t2
select * from course where cno='1001'
(一直在执行查询)
update course set cname='abc' where cno='1001'
select * from course where cno='1001
update course set cname='mon' where cno='1001'
select * from course where cno='1001'
(不可提交,还在执行查询)
select * from course where cno='1001'

多粒度锁
启动事务T1
begin transaction
select sno,sage from student with(updlock) where sno='141530101'
正常执行
启动事务T2
begin transaction
select sno,sage from student with(updlock) where sno='141530101'
等待状态
启动事务T3
begin transaction
select sno,sage from student with(updlock) where sno='141530102'
正常执行
启动事务T4
begin transaction
select sno,sage from student with(tablock) where sno='141530102'
等待状态
修改事务T4并启动
begin transaction
select sno,sage from student with(tablock holdlock)
where sno='141530102'
正常执行
启动事务T5
begin transaction
select sno,sage from student with(nolock) where sno='141530101'
正常执行
启动事务T6
begin transaction
select sno,sage from student with(tablock holdlock)
where sno='141530101’
正常执行,年龄值为22
在T6接着执行
update student set sage=100 where sno = '141530101'
select sno,sage from student where sno='141530101'
正常执行,年龄值为100
在T6接着执行
rollback
select sno,sage from student where sno='141530101'
正常执行,年龄值为22,此时T5读取的即为脏数据

事务的隔离级别
启动事务T1
set transaction isolation level read committed
begin transaction
select sno,sage from stdent
正常执行,read committed是默认隔离级别
启动事务T2
begin transaction
salect sno,sage from student
正常执行
update student set sage +=10 where sno='141530101'
select sno,sage from student
正常执行年龄值为32
在事务T2中重新执行
salect sno,sage from student
在T2接着执行
select sno.sage from stdent
update student set sage +=10 where sno='141530101'
commit
select sno,sage from stdent
正常执行年龄值为42,表示没有丢失T1事物的更新

 

全部评论

相关推荐

有很多问题,求大佬们解答,谢谢大佬们:不知道现在该怎么投实习,该怎么准备内心很纠结学校课程和实习到底怎么选择, 自己也不想课程学业这边出问题, 是不是只能投暑期实习,具体时间该怎么安排前端面试也需要准备算法么, 自己的算法能力很薄弱, 面试题需要准备到什么程度?没有ai项目经验的话,我该如何去补充,如何去找好的ai项目
smile丶snow:1.简历尽量一页,比如教育经历那里,全日制,计算机学院这些可以去掉没啥用好浪费空间。 熟悉三件套就没必要写了吧。js基本上是这样写 * JavaScript核心:深入理解 JS 运行机制(事件循环 Event Loop、微任务/宏任务),熟练掌握 Promise/Async 异步编程 模型。 熟悉可以改成熟练掌握。组件库写一个ant感觉就行,多写了浪费空间。 旅游项目是不是jonas的natours啊,我之前简历也有这个。我之前是这样写的 全栈思维: 熟悉 Node.js/Express 后端架构,掌握 MongoDB 数据库设计与聚合查询 工程化我觉得还是少些吧,不写就问的少,如果你真的了解的话可以写。 1.实习的话推荐大厂官网和aoob上面投,我自己有写一个校招网站的小网站可以直达~github主页上面有,顺便求个关注( 2.大三下一般课程比较少了吧,如果学校比较严的话可以多沉淀一会,如果不太严可以请dai课然后去实习,尽量找个近一些的就行。暑期实习不是暑假才实习哦,基本是上3月底4月初发offer就可以过去了,然后大概暑假的时候走转正流程答辩。 3.大厂算法题+js手写体。hot100+常见的比如数组转树,Promise.all,deepClone,之类 js手写都不难其实。算法看自己能力吧,我其实算法能力也不行。 4.自己平时没有用AI Coding吗?自己想一下怎么让AI帮你更好的写代码~比如Skill的诞生,OpenSpec的诞生,不都是我们想让AI更好帮我们写代码吗。
我的实习日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务