数据库实验报告四--完整性控制
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 行受影响)