1、l在关系数据库中,每个关系都对应为一张表,在关系数据库中,每个关系都对应为一张表,表是数表是数据库的最主要对象据库的最主要对象,是信息世界实体或实体间联系的数,是信息世界实体或实体间联系的数据表示,是用来存储与操作数据的逻辑结构,使用数据据表示,是用来存储与操作数据的逻辑结构,使用数据库时,绝大多数时间都是在与表打交道。因此掌握库时,绝大多数时间都是在与表打交道。因此掌握SQL SQL ServerServer表的相关知识与相关操作是非常重要的。表的相关知识与相关操作是非常重要的。l本章围绕表对象主要介绍如下内容:表的概念、如何本章围绕表对象主要介绍如下内容:表的概念、如何设计表、如何创建和修
2、改表、表信息的交互式查询与维设计表、如何创建和修改表、表信息的交互式查询与维护、删除表等。护、删除表等。3.1 表结构和数据类型表结构和数据类型3.2 界面方式操作表界面方式操作表3.3 命令方式操作表命令方式操作表3.4 界面方式操作表数据界面方式操作表数据3.5 命令方式操作表数据命令方式操作表数据 3.1.1 表和表结构表和表结构每个数据库包含了若干个表。表是表是SQL Server中最主要中最主要的数据库对象,它是用来存储数据的一种逻辑结构。的数据库对象,它是用来存储数据的一种逻辑结构。表由行和列组成,因此也称之为二维表。表是在日常工作和生活中经常使用的一种表示数据及其关系的形式,表3
3、.1就是用来表示学生情况的一个“学生”表。学学 号号姓姓 名名性性 别别出出 生生 时时 间间专专 业业总总 学学 分分备备 注注081101王林王林男男计算机计算机50081103王燕王燕女女计算机计算机50081108林一帆林一帆男男计算机计算机52已提前修完一门课已提前修完一门课081202王林王林男男通信工程通信工程40有一门课不及格,待补有一门课不及格,待补考考081204马琳琳马琳琳女女通信工程通信工程42表3.1“学生”表 下面简单介绍与表有关的几个概念:下面简单介绍与表有关的几个概念:(1)表结构表结构。组成表的各列的名称及数据类型,统称为表。组成表的各列的名称及数据类型,统称
4、为表结构。结构。(2)记录记录。每个表包含了若干行数据,它们是表的。每个表包含了若干行数据,它们是表的“值值”,表中的一行称为一个记录。因此,表是记录的有限集合。表中的一行称为一个记录。因此,表是记录的有限集合。(3)字段字段。每个记录由若干个数据项构成,将构成记录的。每个记录由若干个数据项构成,将构成记录的每个数据项称为字段。例如表每个数据项称为字段。例如表3.1中,表结构为(学号中,表结构为(学号,姓名姓名,性性别别,出生时间出生时间,专业专业,总学分总学分,备注),包含备注),包含7个字段,由个字段,由5个记录个记录组成。组成。下面简单介绍与表有关的几个概念:下面简单介绍与表有关的几个概
5、念:(4)空值空值。空值(。空值(NULL)通常表示未知、不可用或将在以后添加的)通常表示未知、不可用或将在以后添加的数据。若一个列允许为空值,则向表中输入记录值时可不为该列给出具体数据。若一个列允许为空值,则向表中输入记录值时可不为该列给出具体值。而一个列若不允许为空值,则在输入时必须给出具体值。值。而一个列若不允许为空值,则在输入时必须给出具体值。(5)关键字关键字。若表中记录的某一字段或字段组合能唯一标识记录,则。若表中记录的某一字段或字段组合能唯一标识记录,则称该字段或字段组合为候选关键字(称该字段或字段组合为候选关键字(Candidate key)。若一个表有多个候)。若一个表有多个
6、候选关键字,则选定其中一个为主关键字(选关键字,则选定其中一个为主关键字(Primary key),也称为),也称为主键主键。当。当一个表仅有唯一的一个候选关键字时,该候选关键字就是主关键字。一个表仅有唯一的一个候选关键字时,该候选关键字就是主关键字。设计数据库表结构,除了表属性外,主要就是设计数据库表结构,除了表属性外,主要就是设计列属性。在表中创建列时,必须为其指定数设计列属性。在表中创建列时,必须为其指定数据类型,据类型,列的数据类型决定了数据的取值、范围列的数据类型决定了数据的取值、范围和存储格式。和存储格式。列的数据类型可以是列的数据类型可以是SQL Server提供的系统数提供的系
7、统数据类型,也可以是用户定义的数据类型。据类型,也可以是用户定义的数据类型。数数 据据 类类 型型符符 号号 标标 识识数数 据据 类类 型型符符 号号 标标 识识整数型整数型bigint,int,smallint,tinyint文本型文本型text,ntext精确数值型精确数值型decimal,numeric二进制型二进制型binary,varbinary、varbinary(MAX)浮点型浮点型float,real日期时间类型日期时间类型datetime,smalldatetime货币型货币型money,smallmoney时间戳型时间戳型timestamp位型位型bit图像型图像型ima
8、ge字符型字符型c h a r,v a r c h a r、varchar(MAX)其他其他cursor,sql_variant,table,uniqueidentifier,xmlUnicode字符型字符型nchar,nvarchar、nvarchar(MAX)表表3.2 系统数据类型表系统数据类型表h 1 1整数型整数型整数包括整数包括bigintbigint、intint、smallintsmallint和和tinyinttinyint,从标识符的含义就可,从标识符的含义就可以看出,它们的表示数范围逐渐缩小。以看出,它们的表示数范围逐渐缩小。bigintbigint:大整数,数范围为:大
9、整数,数范围为-2-26363(-9223372036854775808-9223372036854775808)2 26363-1-1(92233720368547758079223372036854775807),其精度为),其精度为1919,小数位数为,小数位数为0 0,长度为,长度为8 8字节。字节。intint:整数,数范围为整数,数范围为-2-23131(-2147483648-2147483648)2 23131-1-1(21474836472147483647),),其精度为其精度为1010,小数位数为,小数位数为0 0,长度为,长度为4 4字节。字节。smallintsmal
10、lint:短整数,数范围为:短整数,数范围为-2-21515(-32768-32768)2 21515-1-1(3276732767),其),其精度为精度为5 5,小数位数为,小数位数为0 0,长度为,长度为2 2字节。字节。tinyinttinyint:微短整数,数范围为:微短整数,数范围为 0 0255255,长度为,长度为1 1字节,其精度为字节,其精度为3 3,小数位数为小数位数为0 0,长度为,长度为1 1字节。字节。h 2 2精确数值型精确数值型decimal和numeric可存储从-1038+1到1038-1的固定精度和小数位的数字数据,它们的存储长度随精度变化而变化,最少为5字
11、节,最多为17字节。l 精度为19时,存储字节长度为5。l 精度为1019时,存储字节长度为9。l 精度为2028时,存储字节长度为13。l 精度为2938时,存储字节长度为17。例如,若有声明numeric(8,3),则存储该类型数据需5字节;而若有声明numeric(22,5),则存储该类型数据需13字节。h 3浮点型浮点型有两种近似数值数据类型:float(n)和real。两者通常都使用科学计数法表示数据,即形为:尾数E阶数,如5.6432E20、-2.98E10、1.287659E-9等。lreal:使用4字节存储数据,表数范围为-3.40E+383.40E+38,数据精度为7位有效数
12、字。lfloat:float型数据的数范围为-1.79E+3081.79E+308。定义中的n取值范围是153,用于指示其精度和存储大小。当n在124之间时,实际上是定义了一个real型数据,存储长度为4字节,精度为7位有效数字。当n在2553之间时,存储长度为8字节,精度为15位有效数字。当缺省n时,代表n在2553之间。h 4货币型货币型SQL Server提供了两个专门用于处理货币的数据类型:money和smallmoney,它们用十进制数表示货币值。lmoney:数据的数范围为-263(-922337203685477.5808)263-1(922337203685477.5807),
13、其精度为19,小数位数为4,长度为8字节。money的数的范围与bigint相同,不同的只是money型有4位小数。实际上,money就是按照整数进行运算的,只是将小数点固定在末4位。lsmallmoney:数范围为-231(-214748.3648)231-1(214748.3647),其精度为10,小数位数为4,长度为4字节。可见smallmoney与int的关系就如同money与bigint的关系。h 5位型位型SQL Server中的位(中的位(bit)型数据相当于其他语言中的逻辑型)型数据相当于其他语言中的逻辑型数据,它只存储数据,它只存储0和和1,长度为一个字节,长度为一个字节。但
14、要注意,SQL Server对表中bit类型列的存储做了优化:如果一个表中有不多于8个的bit列,这些列将作为一个字节存储;如果表中有9到16个bit列,这些列将作为两个字节存储;更多列的情况依次类推。当为bit类型数据赋0时,其值为0,而赋非0(如100)时,其值为1。字符串值TRUE和FALSE可以转换为以下bit 值:TRUE转换为1,FALSE转换为0。h 6字符型字符型字符型数据用于存储字符串,字符串中可包括字母、数字和其他特殊符号字符型数据用于存储字符串,字符串中可包括字母、数字和其他特殊符号(如(如#、&等)。在输入字符串时,需将串中的符号用单引号或双引号括起等)。在输入字符串时
15、,需将串中的符号用单引号或双引号括起来,如来,如abc、AbcCde。SQL Server字符型包括两类:固定长度(字符型包括两类:固定长度(char)或可变长度()或可变长度(varchar)字符数据类型。字符数据类型。lchar(n):定长字符数据类型定长字符数据类型,其中,其中n定义字符型数据的长度,定义字符型数据的长度,n在在1到到8000之间,缺省为之间,缺省为1。当表中的列定义为。当表中的列定义为char(n)类型时,若实际要存储的串长类型时,若实际要存储的串长度不足度不足n时,则在串的尾部添加空格以达到长度时,则在串的尾部添加空格以达到长度n,所以,所以char(n)的长度为的长
16、度为n。若输入的字符个数超出了若输入的字符个数超出了n,则超出的部分被截断。,则超出的部分被截断。lvarchar(n):变长字符数据类型变长字符数据类型,其中,其中n的规定与定长字符型的规定与定长字符型char中中n完全完全相同,但这里相同,但这里n表示的是字符串可达到的最大长度。表示的是字符串可达到的最大长度。h 7 7UnicodeUnicode字符型字符型UnicodeUnicode是是“统一字符编码标准统一字符编码标准”,用于支持国际上非英语语种的,用于支持国际上非英语语种的字符数据的存储和处理。字符数据的存储和处理。SQL Server的Unicode字符型可以存储Unicode标
17、准字符集定义的各种字符。Unicode字符型包括nchar(n)和nvarchar(n)两类。nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度 Unicode 数据的数据类型,二者均使用UNICODE UCS-2字符集。lnchar(n):nchar(n)为包含n个字符的固定长度 Unicode 字符型数据,n的值在1与4000之间,缺省为1,长度2n字节。若输入的字符串长度不足n,将以空白字符补足。lnvarchar(n):nvarchar(n)为最多包含n个字符的可变长度Unicode字符型数据,n的值在1与4000之间,缺省为1。长度是所输入字符个数的两倍。实
18、际上,nchar、nvarchar与char、varchar的使用非常相似,只是字符集不同(前者使用Unicode字符集,后者使用ASCII字符集)。h 8 8文本型文本型文本型包括文本型包括texttext和和ntextntext两类,分别对应两类,分别对应ASCIIASCII字符和字符和UnicodeUnicode字符。字符。texttext类型可以表示最大长度为类型可以表示最大长度为 2 23131-1-1(21474836472147483647)个字)个字符,其数据的存储长度为实际字符数个字节。符,其数据的存储长度为实际字符数个字节。ntextntext类型可表示最大长度为类型可表示
19、最大长度为 2 23030-1-1(10737418231073741823)个)个UnicodeUnicode字符,其数据的存储长度是实际字符个数的两倍(以字符,其数据的存储长度是实际字符个数的两倍(以字节为单位)。字节为单位)。h 9 9二进制型二进制型二进制数据类型表示的是位数据流二进制数据类型表示的是位数据流,包括binary(固定长度)和varbinary(可变长度)两种。binary(n):固定长度的n个字节二进制数据。n取值范围为1到8000,缺省为1。binary(n)数据的存储长度为n+4字节。若输入的数据长度小于n,则不足部分用0填充;若输入的数据长度大于n,则多余部分被截
20、断。varbinary(n):n个字节变长二进制数据。n取值范围为1到8000,缺省为1。varbinary(n)数据的存储长度为实际输入数据长度+4个字节。h 1010日期时间类型日期时间类型日期时间类型数据用于存储日期和时间信息,包括日期时间类型数据用于存储日期和时间信息,包括datetimedatetime和和smalldatetimesmalldatetime两类。两类。ldatetime:datetime类型可表示的日期范围从1753 年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒(3.33毫秒或0.00333秒),例如1到3毫秒的值都表示为0毫秒,4到6毫秒
21、的值都表示为4毫秒。datetime类型数据长度为8字节,日期和时间分别使用4个字节存储。前4字节用于存储datetime类型数据中距1900年1月1日的天数。为正数表示日期在1900年1月1日之后,为负数则表示日期在1900年1月1日之前。h 1010日期时间类型日期时间类型日期时间类型数据用于存储日期和时间信息,包括datetime和smalldatetime两类。用户给出datetime类型数据值时,日期部分和时间部分分别给出。日期部分的表示形式常用的格式如下:年年 月月 日日2001 Jan 20、2001 Janary 20年年 日日 月月2001 20 Jan月月 日日,年年Jan
22、 20 2001、Jan 20,2001、Jan 20,01月月 年年 日日Jan 2001 20日日 月月,年年20 Jan 2001、20 Jan,2001日日 年年 月月20 2001 Jan年(年(4位数)位数)2001表示表示年月日年月日20010120、010120月月/日日/年年1/20/01、01/20/2001、1/20/2001月月-日日-年年1-20-01、01-20-2001、1-20-2001月月.日日.年年1.20.01、01.20.2001、1.20.2001说明:年可用4位或2位表示,月和日可用1位或2位表示。时间部分常用的表示格式如下:时时:分分10:20、0
23、8:05时时:分分:秒秒20:15:18、20:15:18.2时时:分分:秒秒:毫秒毫秒20:15:18:200时时:分分AM|PM10:10AM、10:10PMl smalldatetimesmalldatetime:smalldatetime类型数据可表示从1900年1月1日到2079年6月6日的日期和时间,数据精确到分钟。即29.998秒或更低的值向下舍入为最接近的分钟,29.999秒或更高的值向上舍入为最接近的分钟。h 1111时间戳型时间戳型标识符是标识符是timestamptimestamp。若创建表时定义一个列的数据类型为时间戳类型,那么每当对该表加入新行或修改已有行时,都由系统
24、自动将一个计数器值加到该列,即将原来的时间戳值加上一个增量。记录记录timestamptimestamp列的值实际上反映了系统对该记录修改的列的值实际上反映了系统对该记录修改的相对(相对于其他记录)顺序相对(相对于其他记录)顺序。一个表只能有一个timestamp 列。timestamp类型数据的值实际上是二进制格式数据,其长度为8字节。h 1212图像数据类型图像数据类型标识符是标识符是imageimage,它用于存储图片、照片等,它用于存储图片、照片等。实际存储的是可变长度二进制数据,介于0与231-1(2147483647)字节之间。在SQL Server 2005中该类型是为了向下兼容
25、而保留的数据类型。微软推荐用户使用微软推荐用户使用varbinaryvarbinary(MAX)(MAX)数据类型来替代数据类型来替代imageimage类型。类型。h 1313其他数据类型其他数据类型SQL Server 2005还提供了其他几种数据类型:cursor、sql_variant、table和uniqueidentifier。lcursorcursor:是游标数据类型,用于创建游标变量或定义存储过程的输出参数。lsql_variant:是一种存储SQL Server支持的各种数据类型(除text、ntext、image、timestamp和sql_variant外)值的数据类型。
26、sql_variant的最大长度可达8016字节。ltabletable:是用于存储结果集的数据类型,结果集可以供后续处理。luniqueidentifier:是唯一标识符类型。系统将为这种类型的数据产生唯一标识值,它是一个16字节长的二进制数据。lxml:是用来在数据库中保存xml文档和片段的一种类型,但是此种类型的文件大小不能超过2GB。学生管理系统的三个表:学生表(表名为XSB)、课程表(表名为KCB)和成绩表(表名为CJB)为例介绍如何设计表的结构。例如“性别”列只有“男”、“女”两种值,所以可以使用bit型数据,值1表示“男”,值0表示“女”,默认是1;“出生时间”是日期时间类型数据
27、,列类型定为datetime;“备注”列需要存放学生的备注信息,备注信息的内容在0到500个字之间,所以应该使用varchar类型。在XSB表中,只有“学号”列能唯一标识一个学生,所以将“学号”列设为该表的主键。列列 名名数数 据据 类类 型型长长 度度是是 否否 可可 空空默默 认认 值值说说 明明学号学号定长字符型(定长字符型(char)6无无主键,前主键,前2位年级,中间位年级,中间2位班级号,后位班级号,后2位序号位序号姓名姓名定长字符型(定长字符型(char)8无无性别性别位型(位型(bit)111:男;:男;0:女:女出生时间出生时间日期型(日期型(datetime)系统默认系统默
28、认无无专业专业定长字符型(定长字符型(char)12无无总学分总学分整数型(整数型(int)400总学分总学分160备注备注不定长字符型不定长字符型(varchar)500无无表表3.3 XSB的表结构的表结构列列 名名数数 据据 类类 型型长长 度度可可 空空默默 认认 值值说说 明明课程号课程号定长字符型(定长字符型(char)3无无主键主键课程名课程名定长字符型(定长字符型(char)16无无开课学期开课学期整数型(整数型(tinyint)11只能为只能为18学时学时整数型(整数型(tinyint)10学分学分整数型(整数型(tinyint)10表3.4 KCB的表结构列列 名名数数 据
29、据 类类 型型长长 度度可可 空空默默 认认 值值说说 明明学号学号定长字符型(定长字符型(char)6无无主键主键课程号课程号定长字符型(定长字符型(char)3无无主键主键成绩成绩整数型(整数型(int)默认值默认值0表3.5 CJB的表结构3.1.4 表的分类 SQL Server 2005的表可分为:用户基本表、已分区表、临时表与系统表四类。(1)用户基本表用户基本表:是存放用户数据的标准表,是数据库中最基本、最主要的对象。(2)已分区表已分区表:是将数据水平划分为多个单元的表,这些单元可以是将数据水平划分为多个单元的表,这些单元可以分布到数据库中的多个文件组中。分布到数据库中的多个文
30、件组中。在维护整个集合的完整性时,使用分区可以快速而有效地访问或管理数据子集,从而使大型表或索引更易于管理。在分区方案下,将数据从 OLTP 加载到 OLAP 系统中这样的操作只需几秒钟,而不是像在早期版本中那样需要几分钟或几小时。对数据子集执行的维护操作也将更有效,因为它们的目标只是所需的数据,而不是整个表。3.1.4 表的分类 SQL Server 2005的表可分为:的表可分为:用户基本表、已分区表、用户基本表、已分区表、临时表与系统表四类。临时表与系统表四类。(2)已分区表)已分区表已分区表支持所有与设计和查询标准表关联的属性和功能,已分区表支持所有与设计和查询标准表关联的属性和功能,
31、包括约束、默认值、标识和时间戳值、触发器和索引。分包括约束、默认值、标识和时间戳值、触发器和索引。分区表主要用于:区表主要用于:1)表中包含或可能包含以不同方式使用的许多数据;)表中包含或可能包含以不同方式使用的许多数据;2)对表的查询或更新没有按照预期的方式执行,或者维)对表的查询或更新没有按照预期的方式执行,或者维护开销超出了预定义的维护期。护开销超出了预定义的维护期。(3 3)临时表临时表 临时表有两种类型:本地临时表和全局临时表。临时表有两种类型:本地临时表和全局临时表。在与首次创建或引用在与首次创建或引用表时相同的表时相同的SQL ServerSQL Server实例连接期间,本地临
32、时表只对于创建者是可见的。实例连接期间,本地临时表只对于创建者是可见的。当用户与当用户与SQL ServerSQL Server实例断开连接后,将删除本地临时表。全局临时表在实例断开连接后,将删除本地临时表。全局临时表在创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与创建后对任何用户和任何连接都是可见的,当引用该表的所有用户都与SQL ServerSQL Server实例断开连接后,将删除全局临时表。实例断开连接后,将删除全局临时表。(4 4)系统表系统表 SQL Server SQL Server将定义服务器配置及其定义所有表的数据存储在一组特殊的将定义服务器配置及其定义所有表
33、的数据存储在一组特殊的表中,这组表称为系统表。除非通过专用的管理员连接,否则用户无法直表中,这组表称为系统表。除非通过专用的管理员连接,否则用户无法直接查询或更新系统表。也可以通过目录视图查看系统表中的信息。接查询或更新系统表。也可以通过目录视图查看系统表中的信息。3.1.4 表的分类3.2.1 3.2.1 创建表创建表以下是通过“对象资源管理器”创建表XSB的操作步骤:第1步 启动“SQL Server Management Studio”在“对象资源管理器”中展开“数据库”右击“PXSCJ”数据库菜单下的“表”选项,在弹出的快捷菜单中选择“新建表”菜单项,打开如图3.1所示的“表设计器”窗
34、口。填写列名“列属性”窗口 图3.1“表设计器”窗口第2步 在“表设计器”窗口中,根据已经设计好的XSB的表结构分别输入或选择各列的名称、数据类型、是否允许为空值等属性。根据需要,可以在列属性表格填入相应的内容。第3步 在“学号”列上右击鼠标,选择“设置主键设置主键”菜单项,选择“设为主键”选项,如图3.2所示。在列属性窗口中的“默认值和绑定”和“说明”项中分别填写各列的默认值和说明。图3.2 设置XSB表的主键学生情况表结构设计完成后的结果如图3.3所示。单击该按钮保存 在“列属性”窗口中 填写默认值和说明 图3.3 表属性编辑完成结果第4步 在表的各列的属性均编辑完成后,单击工具栏中的“保
35、存”按钮,出现“选择表名”对话框。在“选择表名”对话框中输入表名“XSB”,单击“确定”按钮,这样XSB表就创建好了。在“对象资源管理器”窗口中可以找到新创建的表XSB,如图3.4所示。图3.4 新创建的XSB表第5步 使用同样的方法创建课程表,名称为KCB;创建成绩表,名称为CJB。KCB表创建后的界面如图3.5所示,CJB创建后的界面如图3.6所示。图3.5 创建KCB表图3.6 创建CJB表说明:说明:记住:记住:表是属于表是属于 架构的,而架构是属于数据库的。架构的,而架构是属于数据库的。每个每个表至多可定义表至多可定义10241024列。表和列的名称必须遵守标识符的列。表和列的名称必
36、须遵守标识符的规定,在特定表中必须是唯一的,但同一数据库的不同表中可规定,在特定表中必须是唯一的,但同一数据库的不同表中可使用相同的列名使用相同的列名尽管对于每一个尽管对于每一个架构架构在一个数据库内表的名称必须是唯一的,在一个数据库内表的名称必须是唯一的,但如果为每张表指定了不同的架构,则可以创建多个具有相同但如果为每张表指定了不同的架构,则可以创建多个具有相同名称的表。名称的表。可以创建名为可以创建名为employeesemployees的两个表并分别指定的两个表并分别指定Comp1Comp1和和Comp2Comp2作为其架构。当您必须使用某一作为其架构。当您必须使用某一employees
37、employees表时,可以通表时,可以通过指定表的架构以及表的名称来区分这两个同名表过指定表的架构以及表的名称来区分这两个同名表。用户架构分离用户架构分离 SQL Server 2005 SQL Server 2005 切断数据库用户和架构之间的隐式连接。切断数据库用户和架构之间的隐式连接。什么是架构什么是架构?架构是形成单个命名空间的数据库实体的集合。架构是形成单个命名空间的数据库实体的集合。命名空命名空间是一个集合,其中每个元素的名称都是唯一的。例如,为了避免名称间是一个集合,其中每个元素的名称都是唯一的。例如,为了避免名称冲突,同一架构中不能有两个同名的表。两个表只有在位于不同的架构冲
38、突,同一架构中不能有两个同名的表。两个表只有在位于不同的架构中时才可以同名。中时才可以同名。注意:在讨论数据库工具时,注意:在讨论数据库工具时,“架构架构”还指目录信息,用于说明架构还指目录信息,用于说明架构或数据库中的对象。在讨论或数据库中的对象。在讨论 Analysis Services Analysis Services 时,时,“架构架构”指多维对象,指多维对象,如多维数据集和维度。如多维数据集和维度。用户架构分离(续用户架构分离(续1 1)架构是形成单个命名空间的数据库实体的集合架构是形成单个命名空间的数据库实体的集合。l 虽然虽然 SQL Server 2000 SQL Serve
39、r 2000 包含包含 CREATE SCHEMA CREATE SCHEMA 语句,但实际上并不会语句,但实际上并不会像上面所定义的那样创建架构。像上面所定义的那样创建架构。在在 SQL Server 2000 SQL Server 2000 中,数据库用户和架中,数据库用户和架构是隐式连接在一起的。构是隐式连接在一起的。l 每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,功能上与包含它的架构所有者相同。因而,SQL Server 2000 SQL Server 2000 中的完全限
40、中的完全限定名称的定名称的“架构架构”也是数据库中的用户。也是数据库中的用户。l 因此,从因此,从 SQL Server 2000 SQL Server 2000 数据库中删除用户之前,管理员需要删除该数据库中删除用户之前,管理员需要删除该用户所拥有的所有对象或更改这些对象的所有者。用户所拥有的所有对象或更改这些对象的所有者。以包含此对象的以包含此对象的SQL Server 2000SQL Server 2000数据库为例:数据库为例:accounting.ap.george.balanceaccounting.ap.george.balance 转让对象的所有权也会更改其完全限定名称。引用转
41、让对象的所有权也会更改其完全限定名称。引用accounting.ap.george.balanceaccounting.ap.george.balance的任何代码必须经过更新以反映对名称所做的更的任何代码必须经过更新以反映对名称所做的更改。改。在在 SQL ServerSQL Server中,架构独立于创建它们的数据库用户而存在中,架构独立于创建它们的数据库用户而存在。可以在不。可以在不更改架构名称的情况下转让架构的所有权。并且可以在架构中创建具有用更改架构名称的情况下转让架构的所有权。并且可以在架构中创建具有用户友好名称的对象,明确指示对象的功能。户友好名称的对象,明确指示对象的功能。例如
42、,除了例如,除了accounting.ap.sandra.balanceaccounting.ap.sandra.balance外,您还可以创建名为外,您还可以创建名为accounting.ap.invoice.balanceaccounting.ap.invoice.balance的架构。因为的架构。因为“invoice”invoice”不是用户,所以从数据不是用户,所以从数据库中删除用户后,无需更改此名称。这就简化了数据库管理员和开发人员库中删除用户后,无需更改此名称。这就简化了数据库管理员和开发人员的工作。的工作。用户架构分离(续用户架构分离(续2 2)将架构与数据库用户分离将架构与数据
43、库用户分离对管理员和开发人员而言有下列好处:对管理员和开发人员而言有下列好处:1 1)多个用户可以通过角色成员身份或)多个用户可以通过角色成员身份或 Windows Windows 组成员身份拥有一个架构。这扩组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。展了允许角色和组拥有对象的用户熟悉的功能。2 2)极大地简化了删除数据库用户的操作。)极大地简化了删除数据库用户的操作。3 3)删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架)删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象
44、的应用程序。构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。4 4)多个用户可以共享一个默认架构以进行统一名称解析。)多个用户可以共享一个默认架构以进行统一名称解析。5 5)开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的)开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是架构中,而不是 DBO DBO 架构中。架构中。6 6)可以用比早期版本中的粒度更大的粒度管理架构和架构包含的对象的权限。)可以用比早期版本中的粒度更大的粒度管理架构和架构包含的对象的权限。7 7)完全限定的对象名称现在包含四部分:)完全限定的对象名称现在
45、包含四部分:server.database.server.database.schemaschema.object.object。用户架构分离(续用户架构分离(续3 3)p SQL Server 2005 SQL Server 2005还引入了还引入了“默认架构默认架构”的概念,用于解析未使用的概念,用于解析未使用其完全限定名称引用的对象的名称。其完全限定名称引用的对象的名称。p在在SQL Server 2005SQL Server 2005中,首先检查的是调用数据库用户所拥有的架中,首先检查的是调用数据库用户所拥有的架构,然后是构,然后是 DBO DBO 拥有的架构。拥有的架构。p在在SQL
46、 Server 2005SQL Server 2005中,每个用户都有一个默认架构,用于指定服中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用务器在解析对象的名称时将要搜索的第一个架构。可以使用CREATE USERCREATE USER和和ALTER USERALTER USER的的DEFAULT_SCHEMADEFAULT_SCHEMA选项设置和选项设置和更改默认架构。更改默认架构。如果未定义如果未定义DEFAULT_SCHEMADEFAULT_SCHEMA,则数据库用户将,则数据库用户将把把 DBO DBO 作为其默认架构作为其默认架构。许多实
47、体的所有权都可以转让。许多实体的所有权都可以转让。用户架构分离(续用户架构分离(续4 4)h 1 1更改表名更改表名【例3.1】将XSB表的表名改为student。在“对象资源管理器”中选择需要更名的表XSB,右击鼠标,在弹出的快捷菜单上选择“重命名”菜单项,如图3.7所示,输入新的表名student,按下回车键即可更改表名。图3.7 修改表名h2 2增加列增加列【例3.2】向表XSB中添加一个“奖学金等级”列,“奖学金等级”列为“tinyint”,允许为空值。第1步 启动“SQL Server Management Studio”,在“对象资源管理器”中展开“数据库”,选择“PXSCJ”在“
48、PXSCJ”数据库中选择表“dbo.XSB”,右击鼠标,在弹出的快捷菜单上选择“修改”菜单项,打开“表设计器”窗口。第2步 在“表设计器”窗口中选择第一个空白行,输入列名“奖学金等级”,选择数据类型“tinyint”,如图3.8所示。如果要在某列之前加入新列,可以右击该列,选择“插入列”,在空白行填写列信息即可。增加新列 图3.8 增加新列h 3 3删除列删除列在在“表表dbo.XSBdbo.XSB设计器设计器”窗口中选择需删除的列(例如窗口中选择需删除的列(例如XSBXSB表表中删除中删除“奖学金等级奖学金等级”列),此时箭头指在该列上,右击鼠标,列),此时箭头指在该列上,右击鼠标,在弹出的
49、快捷菜单上选择在弹出的快捷菜单上选择“删除列删除列”菜单项,该列即被删除。菜单项,该列即被删除。h 4 4修改列修改列表中尚未有记录值时,可以修改表结构,如更改列名、列的表中尚未有记录值时,可以修改表结构,如更改列名、列的数据类型、长度和是否允许空值等属性。数据类型、长度和是否允许空值等属性。但当表中有了记录后,但当表中有了记录后,建议不要轻易改变表结构,特别不要改变数据类型,以免产生错建议不要轻易改变表结构,特别不要改变数据类型,以免产生错误。误。h 4 4修改列修改列(1 1)具有以下特性的列不能被修改:)具有以下特性的列不能被修改:具有具有texttext、ntextntext、imag
50、eimage或或timestamptimestamp数据类型的列。数据类型的列。l计算列。计算列。l全局标识符列。全局标识符列。l复制列。复制列。l用于索引的列(但若用于索引的列为用于索引的列(但若用于索引的列为varcharvarchar、nvarcharnvarchar或或varbinaryvarbinary数据类型时,可以增加列的长度)。数据类型时,可以增加列的长度)。l用于由用于由“CREATE STATISTICSCREATE STATISTICS”生成统计的列。若需修改这样的生成统计的列。若需修改这样的列,必须先用列,必须先用“DROP STATISTICSDROP STATIST