实验目的 |
|
实验要求 |
要求利用设计器和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
三、实验结果 贴图失败 大家可以自行下载运行
|