记一次数据库实验报告

实验目的

  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

 

 

 

三、实验结果

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

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值