实验教材李春葆《数据库原理及应用》 实验内容五题目 1)完成P325第7题至第10题。 2)完成P396上机实验题8各题目。 3)完成P396上机实验题9各题目。
实验内容六 1)实现test、library数据库的备份与还原。 2)实现test、library数据库的分离与附加。 3)完成上机实验题10。
前言1:实验六会出现一堆错误,建议自行百度,或者留言评论,当然了我这里也给出一些解决办法,
附在了注释里面请先详细看注释内容,需要的可以查看。
前言2:本次实验五 六直接写在一起了,后续将对数据库疑问进行答疑。
前言3:SQL 触发器是一个数据库对象,它在数据库中发生事件时触发。当数据库表发生更改(例如插入、更新或删除记录)时,我们可以执行一个 SQL 查询,该查询将在数据库中“做某事”。例如,可以在数据库表中的记录插入上设置触发器。 DDL 触发器被触发以响应以 Create、Alter 和 Drop 开头的 DDL(数据定义语言)命令事件,例如 Create_table、Create_view、drop_table、Drop_view 和 Alter_table。 DML 触发器被触发以响应以插入、更新和删除开头的 DML(数据操作语言)命令事件。像 insert_table、Update_view 和 Delete_table。
实验五
1.在 school 数据库的 score 表上创建一个 INSERT 触发器,规定插人记录的课程号只能来自 course 表。
use student2128
go
create trigger triscoreinsert on score2128 after insert
as
begin
declare @name nvarchar(10)
select @name=inserted.课程号 from inserted
if not exists(select 课程号 from course2128 where 课程号=@name)
begin
raiserror('课程号不正确,重新输入',16,1)
rollback
end
end
go
insert into score2128 values ('128','3-105','98')
2.在 school 数据库的 score 表上创建一个 UPDATE 触发器,规定修改记录的课程号只能来自 course 表。
create trigger triscoreupdate on score2128 after update
as
begin
declare @cname nvarchar(10)
select @cname=inserted.课程号 from inserted
if not exists(select 课程号 from score2128 where 课程号=@cname)
begin
raiserror ('修改的课程号有误',16,1)
end
end
go
update score2128 set 课程号='4-102' where 课程号='4-101'
go
3.在 school 数据库的 score 表上创建一个 UPDATE 触发器,规定修改记录的分数只能在 1~100 范围内。
CREATE TRIGGER trig3
ON score2128 AFTER UPDATE
AS
begin
DECLARE @grade FLOAT
SELECT @grade=inserted.分数 FROM inserted
print @grade
IF (@grade <1 OR @grade >100)
BEGIN
RAISERROR('Error',16,1)
ROLLBACK
end
end
GO
UPDATE score2128
SET 分数=97
WHERE 学号='101' AND 课程号='3-105'
4.在 school 数据库的 teacher 表上创建一个 DELETE 触发器,规定不能删除任课教师的记录。
use student2128
go
create trigger triteach on teacher2128 after delete
as
begin
raiserror ('不能删除记录',16,1)
rollback
end
go
delete teacher2128 where 编号=804
go
5.在borrow表中建一个触发器,完成:如果借阅的图书是”网络工程“,那么把该书记录保存在borrow1表中。
use Library2128
create table borrow1(
学号 nvarchar(10),
图书编号 nvarchar(10) primary key (图书编号,学号),
借书日期 datetime
)
go
create trigger tribor on borrow2128 for insert,update
as
insert borrow1
select ins.*
from inserted ins,book2128 b
where ins.图书编号=b.图书编号 and b.图书名='网络工程'
go
insert into borrow2128 values ('19','20090','2022-4-27')
go
select * from borrow1
6.在borrow表建一个触发器,完成:当删除borrow表中任何记录时,将记录保存在borrow1中
create trigger tribordrop on borrow2128 for delete
as
insert borrow1
select *
from deleted
go
delete borrow2128 where 学号 =4
go
select * from borrow1
7.删除前面的触发器
drop trigger tribor
drop trigger tribordrop
8.创建一个登录账号 Liblog,其密码为“123456”。
create login Liblog with password ='123456'
9.为 Liblog 登录账号在 Library 数据库中创建一个数据库用户账号 Liblog。
use Library2128
create user Libuer for login Liblog
10.将 Library 数据库中建表的权限授子 libuser 数据库用户账号,然后收回该权限。
use Library2128
grant create table to Libuer
go
revoke create table from Libuer
11.将 Library 数据库中表 student 上的 INSERT、UPDATE 和 DELETE 权限授予libuser 数据库用户账号,然后收回该权限。
grant insert ,update ,delete on student2128 to Libuer
go
revoke insert ,update ,delete from Libuer
12.删除前面创建的登录账号 Liblog 和数据库用户账号 libuser.
drop login Liblog
go
drop user Libuer
实验六 序号从1开始了
1.实现test、library数据库的备份与还原。
use Library2128
go
exec sp_addumpdevice @devtype ='disk',@logicalname='Backup1',@physicalname='D:\DB\Backup\test.bak'
go
select * from sysdevices
go
backup database Library2128 to Backup1
use test
exec sp_addumpdevice @devtype ='disk',@logicalname='Backup2',@physicalname='D:\DB\Back\test2.bak'
go
backup database Library2128 to Backup2
exec sp_dropdevice 'Backup2'
use master
go
restore database Library2128 from Backup1 with replace
restore database Mtest from Backup2 with replace
go
2.实现test、library数据库的分离与附加
首先说明: .ldf LDF是SQL的日志文件,是不能直接打开的。可以在sql server中附加数据库,查看里面的内容 。 .mdf MDF是SQL Server数据库文件。 但是本次实验是没有另外的ldf和mdf文件故会报错,但是如果愿意可以自己重新制作一个mdf和ldf文件进行导入。
exec sp_detach_db Library2128
go
exec sp_detach_db test
go
exec sp_attach_db @dbname='test',@filename1='D:\DB\sql\test.mdf',@filename2='D:\DB\sql\test.ldf'
go
exec sp_attach_db @dbname = 'Library2128',@filename1='D:\DB\sql\test1.mdf',@filename2='D:\DB\sql\test1.ldf'
go
3.创建一个数据库备份设备backdisk,对应的磁盘文件是"D:\DB\Backup\backup.bak"
use Library2128
go
exec sp_addumpdevice @devtype = 'disk',@logicalname='backdisk',@physicalname='D:\DB\Backup\test4.bak'
go
3.备份到backdisk文件中
backup database Library2128 to backdisk
4.从backdisk恢复Library数据库
use master
restore database Library2128 from backdisk with replace
5.删除备份
exec sp_dropdevice @logicalname = 'backdisk'
|