IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库上机实验五、六(触发器、数据库安全性、数据备份与还原) -> 正文阅读

[大数据]数据库上机实验五、六(触发器、数据库安全性、数据备份与还原)

实验教材李春葆《数据库原理及应用》
实验内容五题目
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 范围内。

-- P325-9
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 触发器,规定不能删除任课教师的记录。

-- P325-10
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表中。

--Test 8-1
use Library2128
create  table borrow1(
    学号 nvarchar(10),
    图书编号 nvarchar(10) primary key (图书编号,学号),
    借书日期 datetime
)
go
create  trigger  tribor on borrow2128 for insert,update
as
    insert  borrow1  --插入数据到borrow1表中
    select  ins.*
    from inserted ins,book2128 b
    where ins.图书编号=b.图书编号 and b.图书名='网络工程'
go --测试数据,此时请在borrow1表中查看记录
insert into borrow2128 values ('19','20090','2022-4-27')
go --查看数据
select * from borrow1

6.在borrow表建一个触发器,完成:当删除borrow表中任何记录时,将记录保存在borrow1中

-- Test 8-2
create  trigger  tribordrop on borrow2128 for delete
as
    insert  borrow1  --插入数据到borrow1表中
    select *
    from deleted
go --测试数据,此时请在borrow1表中查看记录
delete  borrow2128 where 学号 =4
go
select * from borrow1

7.删除前面的触发器

-- Test 8-3
drop trigger tribor
drop trigger tribordrop

8.创建一个登录账号 Liblog,其密码为“123456”。

--Test 9-1
create  login  Liblog with password ='123456'

9.为 Liblog 登录账号在 Library 数据库中创建一个数据库用户账号 Liblog。

--Test 9-2
use  Library2128
create user Libuer for login  Liblog

10.将 Library 数据库中建表的权限授子 libuser 数据库用户账号,然后收回该权限。

-- Test 9-3
use  Library2128
grant create table  to Libuer
go
revoke create table from Libuer

11.将 Library 数据库中表 student 上的 INSERT、UPDATE 和 DELETE 权限授予libuser 数据库用户账号,然后收回该权限。

-- Test 9-4
grant insert ,update ,delete  on student2128 to Libuer
go
revoke insert ,update ,delete from Libuer

12.删除前面创建的登录账号 Liblog 和数据库用户账号 libuser.

-- Test 9-5
drop login Liblog
go
drop user Libuer

实验六
序号从1开始了

1.实现test、library数据库的备份与还原。

-- 实现test  Libra备份与还原,按照我的方法来这样就可以看到在文件里面的备份文件了
-- 请在D盘建立DB\Backup 文件夹和建立DB\Back
-- 先进行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
-- go 删除备份
--exec sp_dropdevice 'Backup1'
--下面进行test的备份
use test
exec sp_addumpdevice @devtype ='disk',@logicalname='Backup2',@physicalname='D:\DB\Back\test2.bak'
go
backup database Library2128 to Backup2
--go
exec sp_dropdevice 'Backup2'

-- 下面对数据库进行还原
-- 还原数据库 如果你执行这段话没有报错就可以,但是如果出现“无法删除因为library也在”,那么请不要先执行这段话!!!可以先进行我下面数据库的分离操作,然后再还原,本人亲测有效。
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文件进行导入。

-- 实现test、library数据库的分离

exec sp_detach_db  Library2128
go
--如果出现无法分离数据库,因为该数据库正在使用,请输入注释的命令,然后再detach,database就是你的数据库名字
-- ALTER DATABASE  test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
exec sp_detach_db  test
go

-- 数据库附加 注意此时使用windows验证登录数据库(不要使用sa登录),同时要包含有mdf、ldf文件,但是一般是没有的(除非你自己创建一个),故会显示错误,但是本语句没有问题
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"

--Test 10-1 无语了前面不就是让我们做了吗又在实验里做,简直没话说
use Library2128
go
exec  sp_addumpdevice @devtype = 'disk',@logicalname='backdisk',@physicalname='D:\DB\Backup\test4.bak'
go

3.备份到backdisk文件中

-- Test 10-2 此时看自己的文件夹
backup database Library2128 to backdisk

4.从backdisk恢复Library数据库

-- Test 10-3 因为前面进行过了所以不会有问题
use master
restore database  Library2128 from backdisk with  replace

5.删除备份

-- Test 10-4
exec  sp_dropdevice @logicalname = 'backdisk'
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:10:56  更:2022-05-08 08:14:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:03:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码