数据库实验报告四--完整性控制

 1.假设有下面两个关系模式: 
   职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码; 
   部门(部门号,名称,经理名,电话),其中部门号为主码; 
  用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义: 
  定义每个模式的主码;定义参照完整性;定义职工年龄不得超过60岁。 
  答 
   CREATE TABLE DEPT 
   (Deptno NUMBER(2), 
   Deptname VARCHAR(10), 
   Manager VARCHAR(10), 
   PhoneNumber Char(12) 
   CONSTRAINT PK_SC PRIMARY KEY (Deptno)); 
   CREATE TABLE EMP 
   (Empno NUMBER(4), 
   Ename VARCHAR(10), 
   Age NUMBER(2), 
   CONSTRAINT C1 CHECK (Age《=60), 
   Job VARCHAR(9), 
   Sal NUMBER(7,2), 
   Deptno NUMBER(2), 
   CONSTRAINT FK_DEPTNO 
   FOREIGN KEY (Deptno) 
   REFERENCES DEPT(Deptno));
2.创建一个名为TR_AGEde1的触发器,要求在插入和更新时检查Student表中Sage是否在15至60之中,如果不在提示“年龄不合法”。输入语句:

create database students
use students

create table student
(
 sno char(10) primary key,
 sname char(10),
 sex char(10),
 age int,
)
----------

创建触发器要求在插入和更新学生年龄时
检查age是否在15到60之间,如不在15到60,
则弹出“年龄不合法”提示信息 
create trigger s1
on student
for insert,update
as
declare @newage int
select @newage=age
from student
if(@newage>=15 and @newage<=60)
begin
update student set @newage=@newage
print '更新成功'
end
else
begin
print '年龄不合法'
rollback transaction
end
----------------
insert 
into student(sno,age)
values(7,5)
年龄不合法
消息 3609,级别 16,状态 1,第 1 行
事务在触发器中结束。批处理已中止。
-------------------

insert 
into student(sno,age)
values(1,15)
(1 行受影响)
更新成功

(1 行受影响)

创建触发器实现删除学生信息时,要求自动
备份被删除的数据到表backupTable中。 
create table backupTable
(
sno char(10) primary key,
 sname char(10),
 sex char(10),
 age int,
)

CREATE TRIGGER s2 
ON student  
FOR DELETE 
AS
      print '开始备份数据,请稍后......'
      INSERT INTO backupTable(sno,sname,sex,age) 
       SELECT  sno,sname,sex,age FROM deleted    
     IF (@@ERROR = 0)
        begin
           print '备份数据成功,备份表中的数据为:'
           SELECT * FROM backupTable
           print '备份数据成功,交易表中的数据为:'
           SELECT * FROM student
        end

delete 
from student
where sno='1'

开始备份数据,请稍后......

(1 行受影响)
备份数据成功,备份表中的数据为:

(1 行受影响)
备份数据成功,交易表中的数据为:

(1 行受影响)

(1 行受影响)

 

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务