sql-server-2008-数据库应用与开发教程--课后习题参考答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sql-server-2008-数据库应用与开发教程--课后习题参考答案
SQL Server 2008数据库应用与开发教程
(第二版)
第一章习题参考答案
1.简述SQL Server 2008系统中主要数据库对象的特点。

答:主要的数据库对象包括数据库关系图、表、视图、同义词、存储过程、函数、触发器、程序集、类型、规则和默认值等。

“表”节点中包含了数据库最基本、最重要的对象——表。

表实际用来存储系统数据和用户数据,是最核心的数据库对象。

“视图”节点包含了数据库中的视图对象。

视图是一种虚拟表,用来查看数据库中的一个或多个表,视图是建立在表基础之上的数据库对象,它主要以SELECT语句形式存在。

在“同义词”节点中包含了数据库中的同义词对象。

这是Microsoft SQL Server 2008系统新增的一种对象。

4.工作?
答:(1) 增强物理安全性
(2) 使用防火墙
(3) 隔离服务
(4) 禁用NetBIOS和服务器消息块
5.SQL Server 2008支持哪两种身份验证?答:Windows 身份验证或混合模式身份验证。

6.如何注册和启动SQL Server 服务器?
答:1. 注册服务器
使用Microsoft SQL Server Management Studio工具注册服务器的步骤如下:
(1) 启动Microsoft SQL Server Management Studio工具,选择“视图”|“已注册”命令或者按下快捷键Ctrl+Alt+G,在打开的“已注册的服务器”窗口中选中“数据库引擎”图标。

(2) 在“数据库引擎”上单击鼠标右键,从弹
出的快捷菜单中选择“新建”|“服务器注册”命令,即可打开如图1-20所示的“新建服务器注册”对话框。

选择“常规”选项卡,可以在该选项卡中输入将要注册的服务器名称。

(3) 选择“连接属性”选项卡,如图1-21所示,在该选项卡中可以设置连接到的数据库、网络以及其他连接属性。

(4) 然后单击“测试”按钮,可以对当前设置的连接属性进行测试。

如果出现如图1-23所示的“新建服务器注册”消息框,则表示连接属性的设置是正确的。

(5) 完成连接属性设置后,单击“保存”按钮,即可完成连接属性的设置操作。

接着单击“保存”按钮,即可完成新建服务器注册的操作。

新注册的服务器名称将出现在列表中。

2. 启动服务器
可以通过“开始”菜单来启动SQL Server Configuration Manager,
7. 熟悉查询分析器的功能与使用。

(略)
第二章习题参考答案
1.在Microsoft SQL Server 2008 中,主数据文件的后缀是_.mdf______,日志数据文件的后缀是__.ldf______。

2. 在创建数据库时,系统自动将_master___系统数据库的所有用户定义的对象复制到新建的数据库。

3. 每个文件组可以有__多__个日志文件。

4. 使用T-SQL语句创建数据库的语句是:CREATE DATABASE;创建表的语句是:CREATE TABLE
1.在一个表上可以定义__多_个CHECK约束。

2.创建表的语句是:_CREATE TABLE 表名
___________。

3.表和表之间的关系是通过__连接实现的。

4.删除表“employ”中的“employdate”列所
使用的语句是什么?
答: ALTER TABLE employ
( DROP employdate
)
5.为表“employ”删除主键约束的语句是怎样
的?
答: ALTER TABLE employ
(
DROP CONSTRAINT 约束名PRIMARY KEY
)
1.在SQL Server 2008中对数据使用SSMS 图形化界面进行修改,与使用T-SQL修改数据,两种方法相比较,哪一种功能更强大、更为灵活?试举例说明。

答:使用T-SQL修改数据功能更强大,更为灵活。

2. 向附录A 学生成绩(XSCJ)数据库的表中送入或修改成样本数据。

(略)
3. 写出T-SQL语句,对产品销售数据库(库名CPXS)产品表进行如下操作:
(1) 插入如下记录
0001 空调 3000 200
0203 冰箱 2500 100
0301 彩电 2800 50
答:语句如下:
insert into 产品表Values('0001','空调3000','200');
insert into 产品表Values('0203','冰箱
2500','100');
insert into 产品表Values('0301','彩电2800','50');
(2)将产品数据库的产品表中的每种商品的价格打8折。

语句如下:
update 产品表SET 价格=价格*0.8
(3)将产品数据库的产品表中价格打8折后小于50的商品删除。

DELETE FROM 产品表
WHERE 价格<50
第五章习题参考答案
1.简述SQL Server 2008的安全层次?
答:在SQL Server 2008中,数据的安全保护由4个层次构成。

SQL Server 2008主要对其中的3个层次提供安全控制。

下面分别对每个层
次进行简介。

(1) 远程网络主机通过Internet访问SQL Server 2008服务器所在的网络,这由网络环境提供某种保护机制。

(2) 网络中的主机访问SQL Server 2008服务器,首先要求对SQL Server进行正确配置,其内容将在下一节中介绍;其次是要求拥有对SQL Server 2008实例的访问权——登录名,其内容将要在9.2.1小节中介绍。

(3) 访问SQL Server 2008数据库,这要求拥有对SQL Server 2008数据库的访问权——数据库用户,其内容将要在9.2.2小节中介绍。

(4) 访问SQL Server 2008数据库中的表和列,这要求拥有对表和列的访问权——权限,其内容将要在9.5.2小节中介绍。

2.对SQL Server实例访问,SQL Server 2008支持哪几种身份验证模式?
答:SQL Server 2008支持两种身份验证模式:
Windows身份验证模式和混合身份验证模式。

3.在SQL Server 2008中有几类角色?
答:三类:服务器角色、数据库角色、应用程序角色
4.什么是架构,架构有什么用处?
答:SQL Server 2008实现了ANSI中有关架构的概念。

架构是一种允许用户对数据库对象进行分组的容器对象。

架构对如何引用数据库对象有很大的影响。

在SQL Server 2008中,一个数据库对象通过4个命名部分所组成的结构来引用:
<服务器>.<数据库>.<架构>.<对象>
使用架构的一个好处是它可以将数据库对象与数据库用户分离,可以快速地从数据库中删除数据库用户。

在SQL Server 2008中,所有的数据库对象都隶属于架构,在对数据库对象或者对其存在于数据库应用程序中的相应引用没
有任何影响的情况下,可以更改并删除数据库用户。

这种抽象的方法允许用户创建一个由数据库角色拥有的架构,以使多个数据库用户拥有相同的对象。

5.如何管理SQL Server 2008的权限层次结构?
答:对数据的访问是通过SQL Server 2008的权限层次结构进行管理的。

可以使用GRANT、DENY和REVOKE语句来管理这个权限层次结构。

●GRANT:允许一个数据库用户或角色执
行所授权限指定的操作。

●DENY:拒绝一个数据库用户或角色的
特定权限,并且阻止它们从其他角色中
继承这个权限。

●REVOKE:取消先前被授予或拒绝的权
限。

6.管理对可编程对象的访问主要涉及哪些可编程对象?
答:可编程对象,如存储过程及用户定义的函
数,具有自己的安全上下文。

数据库用户需要获得授权以执行存储过程、函数和程序集。

一旦数据库引擎检查了执行可编程对象的权限,就会在可编程对象内部对其所执行的操作进行权限检查。

当数据库对象按顺序相互访问时,该访问顺序将形成一个所有权链。

第六章习题参考答案
1.T-SQL和SQL的关系是什么?
答:SQL全称是“结构化查询语言(Structured Query Language)”SQL(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

T-SQL是标准SQL 程式设计语言的增强版,它是用来让应用程式与SQL Server 沟通的主要语言。

T-SQL 提供标准SQL的DDL 和DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如IF
和WHILE)让程式设计更有弹性。

可以理解成T-sql是SqlServer支持的sql语法,而不是软件。

2.试述T-SQL语言的特点。

答:特点包括:
●一体化。

T-SQL语言包含4个组成元素:
数据查询语言(SELECT语句)、数据操纵
语言DML(如INSERT, UPDATE,
DELETE语句)、数据定义语言DDL(如
CREATE, DROP语句)和数据控制语言
(如COMMIT, ROLLBACK等语句)。


些元素集数据定义、数据查询、数据操纵、
数据控制、事务管理和附加语言元素为一
体,方便用户使用。

其中数据查询语言
SELECT是它的核心。

●两种使用方式:T-SQL支持交互方式和嵌
入式方式。

用户既可以使用T-SQL直接查
询存储在数据库中的数据,又可以把
T-SQL语句嵌入到某种高级程序设计语言
(如Visual C#.NET、Java等)中使用。

●非过程化语言。

在T-SQL语句中,用户只
需指出“做什么”,而不需要指出系统“如
何做”,语句具体的操作过程由系统自动完
成。

因此不同的数据库系统均可以使用相
同的T-SQL语句作为数据输入与管理的
接口。

●以记录集合作为操作对象。

所有T-SQL语
句以集合作为输入,并返回集合作为输出。

这种集合特性允许一条T-SQL语句的输
出作为另一条T-SQL语句的输入,所以
T-SQL可以嵌套,这使其具有极大的灵活
性和强大的功能,在很多情况下,一条
T-SQL语句就可以实现其他语言中需要大
段程序才能实现的功能。

类似于人的思维习惯,容易理解和掌握。

T-SQL与其他编程语言相比,要简单得多。

3.T-SQL的标识符必须遵循哪些原则?
答:在定义标识符时必须遵守以下规定:(1)标识符的首字符必须是下列字符之一。

统一码(Unicode)2.0标准中所定义的字母,包括拉丁字母a-z和A-Z,以及来自其他语言的字符。

下划线“_”、符号“@”或者数字符号“#”。

在SQL Server中,某些处于标识符开始位置的符号具有特殊意义。

以“@”符号开始的标识符表示局部变量或参数;以一个数字符号“#”开始的标识符表示临时表或过程,如表“#gzb”就是一张临时表;以双数字符号“##”开始的标识符表示全局临时对象,如表“##gzb”则是全局临时表。

注意:某些Transact-SQL函数的名称以双at 符号(@@)开始,为避免混淆这些函数,建议不要使用以@@开始的名称。

(2)标识符的后续字符可以是以下3种。

统一码(Unicode)2.0标准中所定义的字母。

来自拉丁字母或其他国家/地区脚本的十进制数字。

“@”符号、美元符号“$”、数字符号“#”或下划线“_”。

(3)标识符不允许是Transact-SQL的保留字。

(4)不允许嵌入空格或其他特殊字符。

例如要为明日科技公司创建一个工资管理系统,则可以将其数据库命名为“MR_GZGLXT”。

名字除了要遵守命名规则以外,最好还能准确表达数据库的内容,本例中的数据库名称是以每个字的大写字母命名的,其中还使用了下划线“_”。

4.T-SQL的注释方式是什么?
答:注释也称注解,是程序代码中不执行的文本字符串。

注释主要描述程序名称、作者名称、变量说明、代码更改日期、算法描述等。

使用注释对代码进行说明,不仅能够使程序易读易懂,而且有助于日后对程序的管理与维护。

在T-SQL中,可以使用两种类型的注释符:●注释符“--”用于单行注释
使用双连字符“--”作为注释符时,从双连字符开始到行尾的内容都是注释内容。

这些注释内容既可以与要执行的代码处于同一行,也可以另起一行。

双连字符“--”注释方式主要用于在一行中对代码进行解释和描述。

●注释符“/* */”,用于注释多行文字
在正斜线星号“/*…*/”注释方式中,开始注释对“/*”和结束注释对“*/”之间的所有内容均视为注释。

这些注释字符既可用于多行文字,也可以与执行的代码处在同一行,甚至还可以在可执行代码的内部。

5.说明变量的分类及各类变量的特点。

答:在SQL中,我们常常使用临时表来存储临时结果,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,我们可以考虑使用变量,另外,当一个SQL 语句中的某些元素经常变化时,比如选择条件,也可以使用变量。

变量分为局部变量和全局变量。

在SQL Server 2008系统中,变量的命名规则如下:
●第一个字符必须是字母、数字、下画线或
@符号。

需要注意的是,符号“@”开头
的变量表示局部变量、符号“@@”开头
的变量表示全局变量。

●变量名不能是T-SQL语言的系统保留字
(如IF、ELSE、CONTINUE等),包括大
写和小写形式。

变量名中不允许出现空格或其他特殊字符
6.如何使用IF…ELSE和WHILE流程控制语句?
答:我们经常会遇到这种情况:一个逻辑表达式的结果要么为真,要么为假。

根据不同的结
果,对应于不同的操作。

这时就需要使用IF…ELSE语句在程序中对于给定条件进行判断。

语法格式如下:
IF 条件表达式
{语句体1}
[ELSE
{语句体2}]
说明:
●条件表达式的运算结果应该为TRUE(真)
或FALSE(假),如果条件表达式中含有
SELECT语句,则必须用圆括号将
SELECT语句括起来;
●当条件表达式的值为TRUE时执行语句体
1,然后执行IF语句之后的语句;如果条
件表达式的值为FALSE,则执行ELSE关
键字后面的语句体2,然后执行IF语句之
后的语句;
可以在IF区域或者ELSE区域嵌套另一个IF 语句,对于嵌套的层数没有限制。

WHILE语句是一种将同一段代码循环运行多次的方法,它可以根据一个条件表达式的结果,将代码从0次开始运行到指定次数,或者是持续运行直到遇见BREAK关键字退出循环。

WHILE语句的语法格式如下:
WHILE 条件表达式
循环体
语句的执行流程如图3-7所示。

图3-7 WHILE语句的流程
说明:
●条件表达式的运算结果为TRUE或
FALSE:当条件表达式的值为TRUE时,执行循环体中的语句,然后再次进行条件
判断,重复上述操作,直至条件表达式的
值为FALSE,退出循环体的执行。

●循环体中可以继续使用WHILE语句,称
之为循环的嵌套。

可以在循环体内设置BREAK和CONTINUE 关键字,以便控制循环语句的执行。

7.试述常用函数的分类及各函数的特点。

答:在SQL中常用函数分为:数学函数、字符串函数和日期时间函数,它们的特点如下:
数学函数可以执行对数、指数、三角函数、平方根等数学运算,并返回运算结果。

对输入的字符串进行各种操作的函数称为字符串函数。

与数学函数一样,字符串函数也是经常使用的函数。

SQL Server 2008提供的日期时间函数不多,但非常实用。

这些函数可以执行正确的DATETIME计算,并考虑闰年及其他历法的细节。

在T-SQL中,可以将日期时间函数用在SELECT查询语句的选择列表或用于WHERE 子句中。

第七章习题参考答案
1. 简述SELECT语句的基本语法。

SELECT基本语法格式为:
CREAT TABLE 表名

列的名称数据类型[NOT NULL|NULL]
/*指定列名称、数据类型、是否为空*/
[COLLATE 排序规则名称] /*指
定列的排序规则*/
[DEFAULT 默认值] /*指定列
的默认值*/
[列的约束条件][,…n] /*指定
列的约束条件*/

2.简述SELECT语句中的FROM、WHERE、GROUP以及ORDER子句的作用。

在SELECT语句中:
1)FROM子句:用来指定数据来源的表;
2)WHERE子句:用来限定返回行的搜索条
件;
3)GROUP BY子句:用来指定查询结果的
分组条件;
4)ORDER BY子句:用来指定结果的排序
方式。

3.简述WHERE子句可以使用的搜索条件及其意义。

在WHERE子句中,可以使用的查询条件有以下几种情况:
1)使用比较运算符:比较运算符来比较表达
式值的大小,运算结果为TRUE或者
FALSE。

2)使用逻辑运算符:使用逻辑运算符,连接
WHERE子句中的多个查询条件。

3)使用LIKE模式匹配:使用LIKE模式匹
配运算符,用于指出一个字符串是否与指
定的字符串相匹配。

4)使用BETWEE N和IN运算符来确定范
围。

5)使用NULL运算符判断一个表达式的值
是否为空值。

4.举例说明什么是内连接、外连接和交叉连接?
内连接是最常见的一种连接,也被称为普通连接或自然连接,它是系统默认形式,在实际使用中可以省略INNER关键字。

如从student 表和sc表中,查询所有不及格的学生的学号、学生姓名、所属院系、所选的课程号和成绩。

T-SQL语句为:
SELECT student.sno,sname,sdept,cno,grade
FROM student,sc
WHERE student.sno=sc.sno and grade<60
外连接是指连接关键字JOIN后面表中指定列连接在前一表中指定列的左边或者右边,如果两表中指定列没有匹配行,则返回空值。

有左外连接、右外连接和全连接三种。

如用左外连接查询student表和sc表中的学生的Sno、Cno、Sname和Grade。

左外连接T-SQL语句为:
SELECT student.sno,cno,sname,grade
FROM student LEFT JOIN sc ON sc.sno=student.sno
交叉连接即两个表的笛卡尔积,返回结果是由第一个表的每行与第二个表的所有行组合后形成的表,因此,数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

如交叉连接student和sc两表。

T-SQL语句为:
SELECT * FROM student
SELECT * FROM sc
SELECT student.*,sc.* FROM student CROSS JOIN sc
5.INSERT语句的V ALUES子句中必须指明哪些信息,必须满足哪些要求?
INSERT语句中的V ALUES子句为列表中的各列指定值。

如果省略列表,则V ALUES 子句需要给出插入表中每一列的值。

6. 用T-SQL语句创建数据库“销售管理”,并创建其中三张数据表“商品”,“部门”和“销售”。

结构如下:
商品(商品号char(6),商品名称nchar(10),单价money)
部门(部门号char(6),部门名称nchar(10),部门经理nchar(8),电话char(12))
销售(部门号char(6),商品号char(6),数量int,金额money)
创建销售管理数据库:
CREATE DATABASE 销售
ON
(name='销售',
filename='e:\database\销售.mdf',
size=10,
maxsize=50)
创建商品表:
USE 销售
CREATE TABLE 商品(
商品号char(6) not null,
商品名称nchar(10),
单价 money)
创建部门表:
USE 销售
CREATE TABLE 部门(
部门号char(6) not null,
部门名称nchar(10),
部门经理nchar(8)
电话char(12))
创建销售表:
USE 销售
CREATE TABLE 销售(
部门号char(6) not null,
商品号char(6) not null,
数量 int,
金额money)
7. 用T-SQL语句为上一题中创建的每张表至少添加10条记录。

使用INSERT语句插入记录(略)
8. 使用数据库stuinfo,进行如下操作:
1)将任课教师Daad改为Forster
语句为:
UPDATE course SET cteacher=N'Forster' WHERE cteacher=N'Daad'
2)增加课程vc++,课程号为07,学分为6,
任课教师为Emily
语句为:
INSERT INTO course VALUES ('07','vc++','6','Emily')
3)删除学生贾新民的相关记录
DELETE FROM student WHERE sname=N'贾新民'
4)查询所有学生的姓名及年龄
SELECT sname,sage FROM student
5)查询所有考试不及格的学生的学号、姓
名和成绩
SELECT sno,sname,grade
FROM student,sc
Where student.sno=sc.sno and grade<60
6)查询年龄在20-22岁之间的学生姓名、
年龄、所属院系和政治面貌
SELECT sname,age,sdept,spolicitalstatus FROM student
WHERE sage between 20 and 22
7)查询所有姓李的学生的学号、姓名和性

SELECT sno,sname,ssex FROM student WHERE sname like N'李%'
8)查询名字中第2个字为“华”字的女学
生的姓名、年龄和所属院系
SELECT sname,sage,sdept FROM student WHERE sname like N'_华'
9)查询所有选了3门课以上的学生的学
号、姓名、所选课程名称及成绩
SELECT student.sno,sname,cname,grade FROM student,course,sc
W HERE student.sno=sc.sno and o=o
GROUP BY sc.sno HAVING COUNT(*)>3
10)查询每个同学各门课程的平均成绩和
最高成绩,按照降序排列输出学生姓名、平均成绩和最高成绩
SELECT sname,AVG(grade) as '课程平均分', MAX(grade) as '课程最高分'
FROM student,sc
WHERE student.sno=sc.sno
ORDER BY AVG(grade) DESC
GROUP BY student.sno
11)查询所有学生都选修了的课程号和课
程名
SELECT cno,cname FROM course WHERE NOT EXISTS(
S ELECT * FROM student WHERE NOT EXISTS(
SELECT * FROM SC WHERE o=o and sc.sno=student.sno))
第八章习题参考答案
1.在索引命令中使用关键字CLUSTERED和NONCLUSTERED分别表示将建立的是_聚集索引和非聚集_索引。

2.访问数据库中的数据有两种方法,分别是:表扫描________和__索引查找_______。

3.索引一旦创建,将由_数据库管理系统自动管理和维护。

4.在一个表上,最多可以定义_1___个聚集索引,最多可以有_多个非聚集索引。

5.设有一个职员表为Customers,其上有客户姓名(Name),客户ID(ID)等列,表执行如下语句:
CREATE CLUSTERED INDEX idx ON Customers(Name)
得到以下错误:
Cannot create more than one clustered index
原因是什么,为什么会出错?
答:因为在一个表中只能创建一个聚集索引。

第九章习题参考答案
1. 什么是数据的完整性?数据完整性的主要问题是什么?
答:
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。

它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

数据完整性分为四类:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)。

保证数据的完
整性: 1. 用约束而非商务规则强制数据完整性如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变化,那么只需要进行更新即可。

假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。

如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。

除非你的字段命名很冗长,否则字段名本身还不够。

—Lamont Adams 只要有可能,请采用数据库系统实现数据的完整性。

这不但包括通过标准化实现的完整性而且还包括数据的功能性。

在写数据的时候还可以增加触发器来保证数据的正确性。

不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。

2. 什么是域完整性、实体完整性和引用完整
性?
答:实体完整性,要求表中每一条记录(每一行数据)是惟一的,即它必须至少拥有一个惟一标识以区分不同的数据行。

实现方法有:主键约束PRIMARY KEY、惟一性约束UNIQUE、惟一索引UNIQUE INDEX、标识IDENTITY等。

值域完整性,限定表中输入数据的数据类型与取值范围。

实现方法:默认值约束DEFAULT 或默认对象、核查约束CHECK、外键约束FOREIGN KEY、规则RULE 、数据类型、非空性约束NOT NULL等。

引用完整性,指对数据库进行添加、删除、修改数据时,要维护表间数据的一致性。

实现方法:外键约束FOREIGN KEY、核查约束CHECK、触发器TRIGGER、存储过程PROCEDURE。

用户定义的完整性,用于实现用户特殊要求的数据规则或格式。

实现方法:默认值DEFAULT、核查约束CHECK、规则RULE 等。

3. 约束的作用和类型是什么?
答:答:在SQL Server 2008中,共有6种约束:主键约束(primary key constraint)、唯一性约束(unique constraint)、检查约束(check constraint)、默认约束(default constraint)、外部键约束(foreign key constraint)和空值(NULL)约束。

4. DEFAULE约束的特点是什么?
答:默认约束指定在插入操作中如果没有提供输入值时,则SQL Server系统会自动为该列指定一个值。

默认约束可以包括常量、函数、不带变元的内建函数或者空值。

使用默认约束时,应该注意以下几点:每个字段只能定义一个默认约束;如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断;不能为带有IDENTITY属性或者数据类型为timestamp的字段添加默认约束;如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不
允许该字段有默认约束。

5. 为社么要引入CHECK约束?
答:对表中的某些列创建CHECK(检查)约束是为了实施数据的域完整性约束。

检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性和有效性。

使用检查约束时,应该考虑和注意以下几点:一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关;一个表中可以定义多个检查约束;每个CREATE TABLE 语句中的每个字段只能定义一个检查约束;在多个字段上定义检查约束,则必须将检查约束定义为表级约束;当执行INSERT 语句或者UPDATE 语句时,检查约束将验证数据。

6. 主键约束的作用和创建方式是什么?
答:一个表通常可以通过一个列或多个列组合的数据来唯一标识表中的每一行,这个列或列
的组合就称为表上的主键。

创建表中的主键是为了保证数据的实体完整性。

PRIMARY KEY (主键)约束用于定义基本表的主键,它是唯一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。

创建主键的方法有两种:使用SSMS操作法和Transact-SQL 语句操作法。

使用SSMS图形化界面创建主键约束
在“对象资源管理器”窗口中,展开“数据库”节点下某一具体数据库,展开“表”节点,右键单击要创建主键的表,从弹出的快捷菜单中选择“设计”命令,这时“文档”窗口中打开“表设计器”页,可对表进行进一步定义;选中表中的某列,单击鼠标右键,从弹出的快捷菜单中选择“设置主键”命令即可为表设置主键,
创建或更改表时可通过定义PRIMARY KEY 约束来创建主键。

命令格式:
CREATE TABLE table_name
( column_name data_type
[ DEFAULT default_expression ] | [ IDENTITY [ ( seed ,increment ) ] ]
[ [ CONSTRAINT constraint_name ] PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]
] [,... n]

7. UNIQUE约束的使用场景是什么?
答:一个表只能有一个主键,若有多列或多个列组合需要实施数据惟一性,则可采用惟一约束。

惟一约束与主键约束的主要区别在于:惟一约束用于非主键列,使之满足数据惟一性要求;惟一约束允许NULL值,而主键不允许;惟一约束可以在多列或多个列组合上分别设置,而主键只能在一列或一个列组合上设置。

8. 外键约束的特点是什么?
答:FOREIGN KEY约束是用于建立和加强两个表数据之间的链接的一列或多列。

设置表中的外键约束是为了保证数据的参照完整性。

SQL Server 2008中的关系保证了表之间的连。

相关文档
最新文档