数据库的完整性控制

实体完整性

USE JX
go

SET NOCOUNT ON 
go

--**********1、创建选课表SC,属性为Sno、Cno、Tno和Grade,数据类型分别为char(5)、char(3)、char(5)和decimal(3,1),主码为(Sno,Cno,Tno),主码名为PK_SCT*************************--
--********** Begin **********--
create table SC (
    sno char(5) not null,
    cno char (3) not null,
    tno char(5) not null,
    grade decimal(3,1)
    constraint PK_SCT primary key (sno,cno,tno)
)



--********** End **********--
go
--**********2、创建Student的主码PK_Sno **********--
--********** Begin **********--
alter table student 
add constraint PK_Sno primary key (sno)


--********** End **********--
go
--**********3、创建Course的主码PK_Cno **********--
--********** Begin **********--
alter table  course 
add constraint PK_Cno primary key (cno)


--********** End **********--
go
--**********4、创建Teacher的主码PK_Tno **********--
--********** Begin **********--
alter table teacher 
add constraint PK_Tno primary key (tno)


--********** End **********--
go
--**********5、向Student中插入一个学生的完整信息('21005','测试君','男','2003-09-09','物联网工程',35) **********--
--********** Begin **********--
insert into student
values ('21005','测试君','男','2003-09-09','物联网工程',35)


--********** End **********--
go
--**********6、向Student中插入一个学生的Sname和Sdept信息,内容分别为'测试君'和'软件工程' **********--
--********** Begin **********--
insert into student (sname,sdept)
values ('测试君','软件工程')


--********** End **********--
---------------为确保通关,以下内容请不要删除-----------------
go
SELECT A.NAME AS 表名,B.NAME AS 主码名 FROM SYSOBJECTS A,SYSOBJECTS B 
WHERE A.ID=B.PARENT_OBJ AND A.XTYPE='U' AND B.XTYPE='PK' order by A.NAME
go

参照完整性

USE JX
go

SET NOCOUNT ON 
go

--**********1、创建选课表SC,属性为Sno、Cno、Tno和Grade,数据类型分别为char(5)、char(3)、char(5)和decimal(4,1),要求同时创建名为PK_SCT的主码(Sno,Cno,Tno),名为FK_Sno的外码,使得SC中的Sno与Student的Sno间具有参照完整性,且在删除已有选课信息的学生时级联执行,禁止修改已有选课信息的学号为当前学生表中不存在的学号*************--
--------------------------********** Begin **********--
create table SC (
    Sno char(5) not NULL,
    Cno char(3) not null,
    Tno char (5) not null,
    Grade decimal(4,1) not null,
    constraint PK_SCT primary key (Sno,Cno,Tno),
    constraint FK_Sno foreign key (sno)
    REFERENCES Student(Sno)
        ON DELETE CASCADE
        ON UPDATE NO ACTION
);



----------------------------********** End **********--
go
--**********2、在SC中增加名为FK_Cno的外码,使得SC中的Cno与Course的Cno间具有参照完整性,且有同学选修该课程时该门课程不能删除**********--
-----------------------********** Begin **********--
alter table sc 
add constraint FK_Cno foreign key (cno)
REFERENCES course(cno)



-----------------------********** End **********--
go
--**********3、在SC中增加名为FK_Tno的外码,使得SC中的Tno与Teacher的Tno间具有参照完整性 **********--
-----------------------********** Begin **********--
alter table sc 
add constraint FK_Tno foreign key (tno)
REFERENCES teacher(tno)


-----------------------********** End **********--
go
--**********4、分别向SC表中插入如下几个元组:('21001','3,'5',78)、('21001','5','2',89)、('21004','4','1',78)和('22039','8','9',98)**********--
--------------------------********** Begin **********--
insert into sc (sno,cno,tno,grade)
values ('21001','3','5',78)

insert into sc (sno,cno,tno,grade)
values ('21001','5','2',89)

insert into sc (sno,cno,tno,grade)
values ('21004','4','1',78)

insert into sc (sno,cno,tno,grade)
values ('22039','8','9',98)



---------------------------********** End **********--
go
--**********5、修改选课表中值为'21004'的Sno为'20001'**********--
--------------------------********** Begin **********--
update  sc 
set sno='20001' where sno='21004'


--------------------------********** End **********--
go
--**********6、删除Student中学号为'21004'的学生信息 **********--
-------------------------********** Begin **********--
delete from sc 
where sno='21004'


--------------------------********* End **********--
---------------为确保通关,以下内容请不要删除-----------------
go
select obj.name 外码名,obj2.name 从表名,obj3.name 主表名,delete_referential_action_desc 删除违约操作,
update_referential_action_desc 更新违约操作
from sys.foreign_keys fk,sysobjects obj,sysobjects obj2,sysobjects obj3
where fk.object_id=obj.id and fk.parent_object_id = obj2.id and fk.referenced_object_id = obj3.id
order by obj2.name
SELECT * FROM SC
go

用户定义完整性

USE JX
go

SET NOCOUNT ON 
go

--**********1、为Student增加一列注册时间Registime,数据类型为smalldatetime,并设置默认约束条件D_Registime值为'2022-01-01 23:59:00'*************************--
--********** Begin **********--
alter table Student
add Registime  smalldatetime
constraint   D_Registime default '2022-01-01 23:59:00'



--********** End **********--
go
--**********2、为Student在姓名Sname上增加一个约束名为UQ_Sname的唯一性约束条件,一个约束名为CK_Sname的不能取空值约束条件**********--
--********** Begin **********--
alter table Student
add constraint  UQ_Sname  unique (sname)

alter table Student
add constraint CK_Sname check (sname is not null )


--********** End **********--
go
--**********3、为Student增加一个在姓名Ssex上的约束条件CK_Ssex,使得该属性只能录入性别'男'或'女' **********--
--********** Begin **********--
alter table Student
add constraint CK_Ssex check(ssex='男' or ssex='女')


--********** End **********--
go
--**********4、向Student表中插入一个学号为'21005'、姓名为'测试君'的学生信息**********--
--********** Begin **********--
insert into Student(sno,sname)
values ('21005','测试君')


--********** End **********--
go
--**********5、将学号为'21005'的学生性别设置为'无' **********--
--********** Begin **********--
update Student 
set ssex='无' where sno='21005'


--********** End **********--
go
--**********6、将姓名为'测试君'的学生姓名修改为'李强' **********--
--********** Begin **********--
update Student
set sname='李强' where sname='测试君'


--********** End **********--
---------------为确保通关,以下内容请不要删除-----------------
go
SELECT A.NAME AS 表名,B.NAME AS 约束名,B.XTYPE AS 约束类型 
FROM SYSOBJECTS A,SYSOBJECTS B 
WHERE A.ID=B.PARENT_OBJ AND A.XTYPE='U' AND B.XTYPE IN('D','UQ','C') order by B.NAME
SELECT * FROM Student
go

posted on 2025-06-18 19:30  swj2529411658  阅读(13)  评论(0)    收藏  举报

导航