SQLServer数据库实验三.doc
文本预览下载声明
实验 数据完整性、存储过程与触发器、
数据库备份与恢复
数据完整性
实体完整性
在数据库中建立表S,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录。
CREATE TABLE S
(Sno CHAR(8) NOT NULL UNIQUE,
Sname CHAR(8),
Ssex CHAR(1),
Sage INT,
Sdept CHAR(20),
CONSTRAINT PK_S PRIMARY KEY(Sno));
INSERT S VALUES(S01,王兵,M,23,CS);
SELECT * FROM S;
【练习1】执行下列语句,会发生什么?为什么?
INSERT S VALUES (S01,黄山,M,23,CS)
违反了PRIMARY KEY 约束PK_S1。不能在对象dbo.S1 中插入重复键。
【练习】执行下列语句,会发生什么?为什么?
UPDATE S SET Sno=NULL WHERE Sno=S02;
0行受影响
无S02
参照完整性
建立表C,令Cno为其主键,并在S中插入。CREATE TABLE C
(Cno CHAR(4) NOT NULL UNIQUE,
Cname VARCHAR(50) NOT NULL,
Cpoints INT,
CONSTRAINT PK PRIMARY KEY(Cno));
INSERT C VALUES(C01,ComputerNetworks,2);
INSERT C VALUES(C02,ArtificialIntelligence,3);
建立表SC,令Sno和Cno分别为参照S表以及C表的外键,设定为级联删除,并令(Sno,Cno)为其主键。在不违反参照完整性的前提下,插入。
CREATE Table SC
(Sno CHAR(8),
Cno CHAR(4),
Scredit INT,
CONSTRAINT PK_SC PRIMARY KEY(Sno,Cno),
CONSTRAINT FK_SC_Sno FOREIGN KEY(Sno) REFERENCES S (Sno) ON DELETE CASCADE,
CONSTRAINT FK_SC_Cno FOREIGN KEY(Cno) REFERENCES C(Cno) ON DELETE CASCADE);
INSERT INTO SC VALUES(S02,C01,2);
INSERT INTO SC VALUES (S02,C02,2);
INSERT INTO SC VALUES (S01,C01,2);
INSERT INTO SC VALUES (S01,C02,2);
SELECT * FROM SC;
【练习】执行下列语句,会发生什么?为什么?
INSERT INTO SC VALUES(S99,C99,2);
插不进去
S与c表中无s99与c99
【练习】在S中删除Sno=S01的学生记录,查看SC表中数据,发生了什么变化?为什么?【练习】创建Teacher表,并自定义2个约束U1以及U2,其中U1规定Tname字段唯一,U2规定Tage (级别)字段的上限是28。
CREATE TABLE Teacher
(Tno CHAR(5),
Tname CHAR(8) CONSTRAINT U1 UNIQUE,
Tsex CHAR(1),
Tage INT CONSTRAINT U2 CHECK (Tage=28),
Tdept CHAR(20),
CONSTRAINT PK_Teacher PRIMARY KEY(Tno))
【练习】Teacher表中插入(‘T02’,’王勇’,’M’,38,’ 后勤部’),会发生什么?为什么?给出答案。
插不进去 Tage=28不符合用户自定义完整性
【练习】去除U2约束重新插入(‘T02’,’王勇’,’M’,38,’ 后勤部’),SQL语言短语NOT NULL、UNIQUE、CHECK保证用户定义完整性创建规则
CREATE RULE Rule_sex AS @Value IN (F,M)
Go
EXEC SP_bindrule Rule_sex, Teacher.[Tsex];
实现功能:创建规则Rule_sex,规定插入或更新的值只能是M或F,并绑定到Teacher的Tsex字段
【练习】Rule_sex后,试在Teacher表中插入(‘T03’,’黄号’,’1’,’25’,’ 后勤部’)掌握存储过程的基本操作包括创建存储过程、执行存储过程、修改和删除存储过程等。Create procedure P_student1
As
Select * from Students
再执行该存储过程exec P_s
显示全部