您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页数据库原理及应用 chp6课后习题答案

数据库原理及应用 chp6课后习题答案

来源:好走旅游网
第六章 数据库的安全性和完整性

6.2 假设有如下两个关系模式: Emp(Eno, Ename, Eage, Salary, Deptno) Dept(Deptno, Dname, Phone, Loc)

现在有三个用户U1,U2和U3。史使用SQL的授权语句实现下列要求。 (1) U1只能读Emp关系中除了 salary以外的所有属性。 Grant select(Eno, Ename, Eage, Deptno) on emp to U1;

(2) U2可以读、增、删Dept关系,并可以修改此关系的Phone属性。 Grant select,insert,delete,update(phone) on dept to u2;

(3) U3可以读、增、Dept关系,并可将这些权限转授给其他用户。 Grant select,insert on dept to U3 with grant option; (4) 所有用户可以读Dept关系。 Grant select on dept to public;

6.7请用SQL语句创建题目6.2中Emp和Dept关系,并有以下约束。 (1) Dept的主键是Deptno,Emp的主键是Eno。 (2) Emp的外键是Deptno,被参考的关系是Dept。 (3) Emp的 Eage取值在20~60之间。 (4) Dept的Dname是惟一的并且非空。 (5) Emp的Salary >1000。 说明:本题只要求创建EMP

CREATE TABLE DEPT

(Deptno Char(4) Primary Key,

Dname Varchar(10) unique not null, Phone Varchar(12), Loc Varchar(50)

Primary Key(Deptno),

或 Constraint Pk_Sc Primary Key(Deptno) );

CREATE TABLE EMP

(Eno Char(8) Primary Key, Ename Varchar(10), Eage Smallint

[Constraint C1] Check(Eage >=20 and Eage<=60), Salary Numeric(7,2) check (Salary >1000), Deptno Char(4) References Dept(Deptno) ,

[Constraint Fk_Deptno] Foreign Key (Deptno) References Dept(Deptno) );

6.9在题目6.2中定义的Emp和Emp关系中,试用触发器表示下列完整性约束。 (1) 20≤Eage≤60;

create trigger tri_update_eage_emp on emp for insert,update as declare @Eage smallint begin

select @eage=eage from inserted if (@eage<20 or @eage>60) begin

raiserror('年龄不在合法范围内',16,1) rollback transaction end end

(2) 1000≤Salary≤10000;

create trigger tri_update_salary_emp on emp for insert,update as declare

@salary Numeric(7,2) begin

select @salary=salary from inserted if (@salary<1000 or @salary>10000) begin

raiserror('工资的取值不在有效范围内',16,1) rollback transaction end end

(3) 当插入或者修改 一个职工记录的时候,如果工资低于1000元则自动改为1000元。

create trigger insert_or_update_emp on emp for insert,update as declare @eno Char(8), @salary Numeric(7,2) begin

select @eno=eno from inserted select @salary=salary from inserted if (@salary<1000)

update emp set salary=1000 where eno= @eno end 或

create trigger insert_or_update_emp on emp for insert,update as begin

update emp set salary=1000 where eno in

(select eno from inserted where salary<1000) end

如果写在一起:不过最好按照上述三个写 create trigger insert_or_update_emp on emp for insert,update as

declare @eno Char(8), @eage smallint, @salary Numeric(7,2) begin

select @eno=eno from inserted select @eage=eage from inserted select @salary=salary from inserted if (@eage<20 or @eage>60) begin

raiserror('年龄不在合法范围内',16,1) rollback transaction end else

if (@salary>10000) begin

raiserror('工资的取值不在有效范围内',16,1) rollback transaction end

else

if (@salary<1000)

update emp set salary=1000 where eno= @eno end

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务