记一次数据库实验报告

本文详细介绍了在SQLServer2008中实现数据库完整性约束的实验步骤,包括实体完整性、参照完整性和域完整性的设置与管理。涵盖主键、自增字段、唯一性、检查、外键和默认值约束的定义、修改与删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的

  1. 理解数据库完整性约束的概念
  2. 掌握SQL Server的数据库完整性约束技术
  3. 掌握SQL Server违反数据库完整性约束的处理措施

实验要求

要求利用设计器和T-SQL语句,完成实体完整性、参照完整性和域完整性约束。参照实验指导书实验四,完成实验报告。

实验内容

    • 实验环境

SQL SERVER 2008

二、实验步骤

实验4.1:主键的设置和管理(见图4.1.1)

(1)在SQL server management studio窗口中设置主键和修改主键。

(2)用T—SQL语句定义或修改主键。

如在教学管理数据库JXGL中创建学生表S时同时定义主键(见图4.1.2)

CREATE TABLE S

(

sno char(9) primary key,

sname char(8),

sex char(2),

age smallint,

sdept varchar(50)

)

如果定义数据库表时S没有定义sno为主键,则需要添加主键(见图4.1.3)

ALTER TABLE S

ADD

constraint PK_sno primary key clustered(sno)

实验4.2:SQL自增字段int identity(1,1)

(1)可以用int identity(1,1)类型定义自增列。(见图4.2.1)

USE JXGL

GO

CREATE TABLE S

(

sno int identity(1,1),

sname char(8),

sex  char(2),

age smallint,

sdept varchar(50)

)

(2)用SELECT查询时增加列。(见图4.2.2)

USE JXGL

GO

SELECT  identity(int,1,1) AS #ID,*INTO #tmp FROM S

SELECT *FROM #tmp

GO

(3)如下例:(见图4.2.3)

USE JXGL

GO

SELECT @@identity

GO

实验4.3:唯一性约束的设置与删除

(1)在SQL server management studio窗口中设置和删除唯一性约束。

(2)用T—SQL语句定义或者修改唯一性约束。

在创建表时可以将唯一性约束作为CREATE TABLE SQL语句的一部分来定义,也可以创建表后用ALTER TABLE语句添加这些约束。(见图4.3.1)

CREATE TABLE S

(

sno char(9) NOT NULL primary key,

sname char(8) NOT NULL CONSTRAINT S_sno UNIQUE,

sex char(2),

age smallint,

sdept varchar(50)

 )

实验4.4:创建和管理检查约束

(1)在CREATE TABLE 语句中创建检查约束。(见图4.4.1)

USE JXGL

GO

CREATE TABLE S

(

sno char(9) NOT NULL primary key,

sname char(8) NOT NULL CONSTRAINT S_sno UNIQUE,

sex char(2),

age smallint CHECK(age>=15 AND age<=30),

sdept varchar(50)

)

GO

(2)CHECK子句关联了age列,这是一个列级约束。如下例(见图4.4.2)

USE JXGL

GO

CREATE TABLE S

(

sno char(9) NOT NULL primary key,

sname char(8) NOT NULL CONSTRAINT S_sno UNIQUE,

sex char(2),

age smallint CONSTRAINT CK_s_age CHECK(age>=15 AND age<=30),

sdept varchar(50)

)

GO

(3)用户也可以将该约束作为表级检查约束。(见图4.4.3)

USE JXGL

GO

CREATE TABLE S

(

sno char(9) NOT NULL primary key,

sname char(8) NOT NULL CONSTRAINT S_sno UNIQUE,

sex char(2),

age smallint,

sdept varchar(50)

CHECK(age>=15 AND age<=30),

)

GO

(4)在现有表上创建检查约束。(见图4.4.4)

USE JXGL

GO

ALTER TABLE S

WITH NOCHECK ADD CONSTRAINT CK_s_dept

check(sdept IN('CS','MA','IS'))

GO

(5)用户也可以在一个ALTER TABLE语句中同时给表添加多个检查约束。(见图4.4.5)

USE JXGL

GO

ALTER TABLE S

WITH NOCHECK ADD CONSTRAINT CK_s_dept

check(sdept IN('CS','MA','IS')),

CONSTRAINT CK_age CHECK(age>=15 AND age<=30)

GO

(6)创建多列约束。(见图4.4.6)

USE JXGL

GO

ALTER TABLE S WITH NOCHECK

ADD CONSTRAINT CK_S_age_dept

check(sdept IN('CS','MA','IS') AND age>=15 AND age <=30)

GO

(7)使用下列ADD CONSTRAINT子句:(见图4.4.7)

USE JXGL

GO

ALTER TABLE S WITH NOCHECK

ADD CONSTRAINT CK_S_age_dept

check((sdept='CS' AND sdept>=15)OR

(sdept='MA' AND sdept<=30)OR

(sdept='IS'))

GO

实验4.5:外键的定义和管理

(1)在定义数据表时定义外键。(见图4.5.1)

USE JXGL

GO

CREATE TABLE SC

(sno char(9) NOT NULL,

cno char(4) NOT NULL,

GRADE REAL NULL,

PRIMARY KEY(sno,cno),

FOREIGN KEY(sno) REFERENCES S(sno),

FOREIGN KEY(cno) REFERENCES S(cno)

)

GO

(2)如果在定义表SC时没有定义外键,可以增加表SC的外键约束FK_s_sno,表SC中的sno受表S中的SQL server主键sno约束。(见图4.5.2)

USE JXGL

GO

BEGIN TRANSACTION

ALTER TABLE SC ADD CONSTRAINT FK_s_sno

FOREIGN KEY(sno)

REFERENCES S(sno)

COMMIT TRANSACTION

GO

(3)参照完整性测试。(见图4.5.3)

USE JXGL

INSERT INTO SC VALUE('S8','C4')

INSERT INTO SC VALUE('S9','C4')

INSERT INTO SC VALUE('S100','C4')

GO

(4)当外键没有用时就可以删除它,如删除SC的外键FK_s_sno。(见图4.5.4)

USE JXGL

GO

BEGIN TRANSACTION

ALTER TABLE SC DROP CONSTRAINT FK_s_sno

COMMIT

GO

实验4.6:默认值约束的设置与删除

(1)创建表时指定默认值。(见图4.6.1)

USE JXGL

GO

CREATE TABLE S(

SEX char(2) DEFAULT'')

GO

(2)创建表时指定默认值,并指定约束名。(见图4.6.2)

USE JXGL

GO

CREATE TABLE S(

SEX char(2) CONSTRAINT S_SEX_DEFA DEFAULT'')

GO

(3)创建表时没有指定默认值,通过SQL语句添加默认值。(见图4.6.3)

USE JXGL

GO

ALTER TABLE S ADD DEFAULT'' FOR SEX

GO

(4)通过SQL语句添加默认值,并指定约束名称。(见图4.6.4)

USE JXGL

GO

ALTER TABLE S ADD CONSTRAINT S_SEX_DEFA DEFAULT'' FOR SEX

GO

(5)删除默认值约束。(见图4.6.5)

USE JXGL

GO

ALTER TABLE S DROP CONSTRAINT S_SEX_DEFA

GO

 

 

 

三、实验结果

贴图失败 大家可以自行下载运行

 

 

 

 

 

本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验一 实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库的设计过程并利用SQL SERVER2005建立数据库。 实验二 实验题目: 数据库的定义 实验目的:掌握数据表建立、修改、删除、索引的SQL语句。 实验内容: (1)数据表的建立 (2)数据表的修改 (3)数据表的删除 (4)数据表的索引建立 为S表的DEPT建立唯一索引 (5)视图的建立删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选课多于3门的学生学号。 查询计算机系学生2号课不及格的学生学号和成绩。 实验三 实验题目: 数据表的操作 实验目的: 掌握数据表数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库中学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号课成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的课程门数。 (5)统计HU老师所授每门课程的学生平均成绩。 (6)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号、姓名和缓考课程号。 (8)检索‘OS’课成绩高于该课平均成绩的同学学号。 (1) 检索计算机系女生的学号和姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何课程的学生学号。 (4) 检索WANG老师所授课程号、课程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’课程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部课程的学生学号。 实验四 实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个表变量,用来存储两名学生的学号,姓名,所在系。 2.编写一个自定义的函数,该函数接受一个学生姓名,返回其学生表中基本信息及选课情况。 3.试用CASE语句输出学生表中各年龄段的学生人数。 4.编写存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C表的完整性约束 2. 定义SC表的完整性约束,要求当其被参照表发生删除操作时,违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内 ☆ 建立一个INSTEAD OF触发器,每当修改课程表中录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库中表,并作出响应。 实验六 实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test表,通过授权模式的方法,授权给user2表访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。 ☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对表S的插入权限。 实验七 实验题目: 数据库的设计 实验目的: 掌握数据库的概念结构设计和逻辑结构设计,掌握ER图的表示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其中有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值