当前位置:首页 > 习题答案
GO
CREATE PROCEDURE GRADE_INFO @C_NAME VARCHAR(50)
AS
SELECT CNAME,SC.SNO,SNAME,GRADE
FROM S JOIN SC ON S.SNO=SC.SNO JOIN C ON SC.CNO=C.CNO AND CNAME=@C_NAME
GO
7.在教学管理数据库中,创建一个INSERT触发器TR_C_INSERT,当在C表中插入一条新记录时,触发该触发器,并给出“你插入了一门新的课程!”的提示信息。
解:
CREATE TRIGGER TR_C_INSERT ON C FOR INSERT
AS
PRINT '你插入了一门新的课程!'
GO
8-8 在教学管理数据库中,创建一个AFTER触发器,要求实现以下功能:在SC表上创建一个插入、更新类型的触发器TR_GRADE_CHECK,当在GRADE字段中插入或修改成绩后,触发该触发器,检查分数是否在0~100之间。
解:
CREATE TRIGGER TR_GRADE_CHECK ON SC FOR
INSERT,UPDATE
AS
DECLARE @SC_grede tinyint SELECT @SC_grade=SC.grade FROM SC
IF (@SC_grade NOT BETWEEN 0 AND 100)
PRINT '你插入的成绩不在0~100之间!'
GO
9.在教学管理数据库中,创建用户定义函数C_MAX,根据输入的课程名称,输出该门课程最高分数的同学学号。
解:
USE JXGL GO
CREATE FUNCTION C_MAX (@C_NAME CHAR(8)) RETURNS REAL AS
BEGIN
DECLARE @S_MAX REAL
SELECT @S_MAX=MAX(GRADE)
FROM SC JOIN C ON SC.CNO=C.CNO AND C.CNAME=@C_NAME RETURN @S_MAX
END GO
10.在教学管理数据库中,创建用户定义函数SNO_INFO,根据输入的课程名称,输出选修该门课程的学生学号、姓名、性别、系部、成绩。
解:
USE JXGL GO
CREATE FUNCTION SNO_INFO (@C_NAME CHAR(8)) RETURNS TABLE AS
RETURN(SELECT S.SNO,SNAME,SEX,SDEPT,GRADE
FROM S JOIN SC ON S.SNO=SC.SNO JOIN C ON SC.CNO=C.CNO AND C.CNAME=@C_NAME)
GO
习 题 9
1.名词解释:
事务 封锁 保存点 死锁 答:
事务:就是用户对数据库进行的一系列操作的集合,对于事务中的系列操作要么全部完成,要么全部不完成。
封锁:是使事务对它要操作的数据有一定的控制能力。封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性。
保存点:是事务在某一点处设置一个标记,这样当使用回滚语句时,可以不用回滚到事务的起始位置,而是回滚到标记所在的位置。
死锁:它是指系统中有两个或两个以上的事务都处于等待状态,并且每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果造成任何一个事务都无法继续执行。
2.简述显式事务与隐式事务的区别。
答:显式事务是由用户自己指定的事务,使用关键字BEGIN TRANSACTION和ROLLBACK TRANSACTION或COMMIT TRANSACTION进行事务的开始和终止事务的操作。
隐式事务又称自动提交事务。它在执完语句后自动提交事务,而且可以通过SET IMPLICIT_TRANSACTIONS ON /OFF来打开和关闭隐式事务。
3.描述并发控制可能产生的影响。
答:多个用户访问同一个数据资源时,如果数据存储系统没有并发控制,就会出现并发问题;比如当两个或多个事物选择同一行,然后根据最初选定的值更新该行是,就会出现更新丢失的问题;当一个事物多次访问同一行且每次读取不同数据时,会出现不可重复读问题;当对某行执行插入或删除操作,而该行属于某事务正在读取的行的范围时,就会出现幻
读问题;即读出的是不正确的临时的临时数据。
4.如何在事务中设置保存点,保存点有什么用途?
答:保存点提供了一种机制,用于回滚部分事务。可以使用 SAVE TRANSACTION savepoint_name 语句创建一个保存点,然后再执行 ROLLBACK TRANSACTION savepoint_name 语句回滚到该保存点,从而无须回滚到事务的开始。在不可能发生错误的情况下,保存点很有用。在很少出现错误的情况下使用保存点回滚部分事务,比让每个事务在更新之前测试更新的有效性更为有效。更新和回滚操作代价很大,因此只有在遇到错误的可能性很小,而且预先检查更新的有效性的代价相对很高的情况下,使用保存点才会非常有效。
5.如何才能尽量避免发生死锁?
答:虽然不能完全避免死锁,但可以使死锁的数量减至最少。防止死锁的途径就是不能让满足死锁的条件发生,为此,用户需要遵循以下原则:
(1) 尽量避免并发地只执行更新数据的语句。
(2) 要求每个事务一次就将所有要使用的数据全部加锁,否则就不予执行。
(3) 预先规定一个封锁顺序,所有的事务都必须按这个顺序对数据执行封锁。例如,不同的过程在事务内部对对象的更新执行顺序尽量保持一致。
(4) 每个事务的执行时间不可太长,在业务允许的情况下可以考虑将事务分割成为几个小事务来执行。
(5) 将逻辑上在一个表中的数据尽量按行或列分解为若干小表,以便改善对表的访问性能。一般来讲,如果数据不是经常被访问,那么死锁就不会经常发生。
(6) 将经常更新的数据库和查询数据库分开。
6.在教学管理数据库中,创建一个事务,将所有“C3”号课程的女同学加5分,并提交。
解:
USE JXGL GO
DECLARE @TranName VARCHAR(20) SELECT @TranName='Add_Grade'
BEGIN TRAN @TranName
UPDATE SC SET GRADE=GRADE+5
FROM S JOIN SC ON S.SNO=SC.SNO AND CNO='C3'
COMMIT TRAN @TranName
GO
7. 在教学管理数据库中,创建一个事务,向C表添加一条记录,设置保存点;再将“C4”号课程的任课老师更改为“王晓清”。
解:
USE JXGL GO
BEGIN TRAN
INSERT INTO C
VALUES('C11','数学建模','MA','李守信') SAVE TRAN savepoint UPDATE C
SET TNAME='王晓清' WHERE CNO='C4'
COMMIT TRAN GO
习 题 10
1.名词解释:
身份验证 登录帐户 数据库用户 角色 答:
身份验证:是指确定登录SQL Server的用户的登录账户(也称为“登录名”)和密码是否正确,以此来验证其是否具有连接SQL Server的权限。
登录账户:是用来登录到SQL Server服务器,但是要访问某个数据库,还需要有这个数据库的用户帐户,这是不同级别的安全机制了。
数据库用户:是指访问指定数据库的用户,这就需要设置每个用户访问对应数据库的权限,以提高数据库的安全性。
角色:是为了方便权限管理而设置的管理单位,它是一组权限的集合。将数据库用户按所享有的权限进行分类,即定义为不同的角色。
2.SQL Server有几种身份验证方式,它们的区别是什么? 答:SQL Server提供了两种对用户进行身份验证的模式:Windows验证模式、SQL Server 和Windows 混合验证模式,默认模式是Windows身份验证模式。其中Windows验证模式只适用于能够提供有效身份验证的Windows操作系统。混合验证模式允许基于Windows的和基于SQL Server的身份验证,系统直接采用Windows的身份验证机制,否则SQL Server将通过账户的存在性和密码的匹配性自行进行验证,即采用SQL Server身份验证模式。
3.简述角色的概念及其分类。
答:角色是为了方便权限管理而设置的管理单位,它是一组权限的集合。SQL Server中有两类角色,分别为固定角色和用户定义数据库角色。每一个固定角色都拥有一定级别的服务器和数据库管理职能。根据它们对服务器或数据库的管理职能,固定角色又分为固定服务器角色和固定数据库角色。
4.简述固定服务器角色和固定数据库角色的区别。
答:固定服务器角色是相对于服务器而言的,他们的权限都是固定的,并且不能新建或删除固定服务器角色,而自定义数据库角色是可以添加和删除的,并且可以给它授予不同的权限。db_owner是数据库的拥有都,对数据库具有完全控制权限。
5.简述进行权限设置时,授予、拒绝或撤销三者之间的关系。
答:授予:用户被授予特定数据库对象的某种操作权限,该用户就可以对数据在此权限范围内进行操作;
撤销:用户不再具有特定数据库对象的某种操作权限,但用户可以通过其组或角色成员身份继承此种权限;
拒绝:禁止用户对特定数据库对象的某种操作权限,防止用户通过其组或角色成员身份继承此种权限。
6.在教学管理数据库中,创建SQL Server登录帐户User_L1和User_L2,并在此基础上创建数据库用户User_x1和User_x2。
解:
USE JXGL GO
共分享92篇相关文档