Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 表的操作与管理.

Similar presentations


Presentation on theme: "第5章 表的操作与管理."— Presentation transcript:

1 第5章 表的操作与管理

2 5.1 数据类型 在SQL Server2005 中,每个列、局部变量、表达式和参数都有其各自的数据类型。指定对象的数据类型相当于定义了该对象的四个特性: (1)对象所含的数据类型,如字符、整数或二进制数。 (2)所存储值的长度或它的大小。 (3)数字精度(仅用于数字数据类型)。 (4)小数位数(仅用于数字数据类型)。 SQL Server提供系统数据类型集,定义了可与SQL Server一起使用的所有数据类型;另外用户还可以使用Transact-SQL或.NET框架定义自己的数据类型,它是系统提供的数据类型的别名。每个表可以定义至多250个字段,除文本和图像数据类型外,每个记录的最大长度限制为1962个字节。

3 5.1.1 系统数据类型 1、精确数字类型; 2、近似数字类型; 3、日期和时间类型; 4、字符数据类型;
5、Unicode 字符数据类型; 6、二进制字符数据类型; 7、其它数据类型。

4 5.1.1 系统数据类型 1、精确数字类型 (1)精确数字类型包括: 整数类型; Bit(位类型);
Decimal和Numeric(数值类型); Money和SmallMoney(货币类型)。

5 5.1.1 系统数据类型 1、精确数字类型 (2)整数类型:
整数类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。整数类型包括以下四类: (1)Bigint:Bigint数据类型可以存储从 ( ) 到( ) 范围之间的所有整型数据。每个Bigint数据类型值存储在8个字节中。 (2)Int(Integer):Int(或integer)数据类型可以存储从( )到( )范围之间的所有正负整数。每个Int数据类型值存储在4个字节中。 (3)Smallint:可以存储从(-32768)到32767范围之间的所有正负整数。每个smallint类型的数据占用2个字节的存储空间。 (4)Tinyint:可以存储从0~255范围之间的所有正整数。每个tinyint类型的数据占用1个字节的存储空间。

6 5.1.1 系统数据类型 1、精确数字类型 (3)位数据类型 (4)Decimal数据类型和Numeric数据类型
Bit称为位数据类型,其数据有两种取值:0和1,长度为1字节。在输入0以外的其他值时,系统均把它们当1看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择。 (4)Decimal数据类型和Numeric数据类型 Decimal数据类型和Numeric数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用2~17个字节来存储 到1038-1之间的固定精度和小数位的数字。也可以将其写为Decimal(p,s)的形式,p和s确定了精确的总位数和小数位。其中p表示可供存储的值的总位数,默认设置为18;s表示小数点后的位数,默认设置为0。例如:decimal(10,5),表示共有10位数,其中整数5位,小数5位。

7 5.1.1 系统数据类型 1、精确数字类型 (5)货币数据类型 货币数据类型包括Money和SmallMoney两种:
(1)Money:用于存储货币值,存储在money数据类型中的数值以一个正数部分和一个小数部分存储在两个4字节的整型值中,存储范围为( )到( ),精确到货币单位的千分之十。 (2)Smallmoney:与money数据类型类似,但范围比money数据类型小,其存储范围为 到 之间,精确到货币单位的千分之十。 当为money或smallmoney的表输入数据时,必须在有效位置前面加一个货币单位符号。

8 5.1.1 系统数据类型 2、近似数字类型 近似数字类型包括Real和Float两大类。
(1)Real:可以存储正的或者负的十进制数值,最大可以有7位精确位数。它的存储范围从-3.40E-38~3.40E+38。每个Real 类型的数据占用4个字节的存储空间。 (2)Float:可以精确到第15位小数,其范围从-1.79E-308~1.79E+308。如果不指定Float 数据类型的长度,它占用8个字节的存储空间。Float数据类型也可以写为Float(n)的形式,n指定Float数据的精度,n为1~15之间的整数值。当n取1~7时,实际上是定义了一个Real 类型的数据,系统用4个字节存储它;当n取8~15时,系统认为其是Float类型,用8个字节存储它。

9 5.1.1 系统数据类型 3. 日期和时间数据类型 (1)Datetime:用于存储日期和时间的结合体,它可以存储从公元1753年1月1日零时起~公元9999年12月31日23时59分59秒之间的所有日期和时间,其精确度可达三百分之一秒,即3.33毫秒。Datetime数据类型所占用的存储空间为8个字节,其中前4个字节用于存储基于1900年1月1日之前或者之后日期数,数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期之后的日期,时间以子夜后的毫秒存储在后面的4个字节中。当存储Datetime数据类型时,默认的格式是MM DD YYYY hh:mm A.M./P.M,当插入数据或者在其他地方使用Datetime类型时,需要用单引号把它括起来。默认的时间日期是January 1, :00 A.M。可以接受的输入格式如下:Jan 、JAN 、January 、Jan 、 Jan和1999 Jan 4。 (2)Smalldatetime:与Datetime数据类型类似,但其日期时间范围较小,它存储从1900年1月1日~2079年6月6日内的日期。SmallDatetime数据类型使用4个字节存储数据,SQL Server 2000用2个字节存储日期1900年1月1日以后的天数,时间以子夜后的分钟数形式存储在另外两个字节中,SmallDatetime的精度为1分钟。

10 5.1.1 系统数据类型 4. 字符数据类型 字符数据类型也是SQL Server中最常用的数据类型之一,它可以用来存储各种字母、数字符号和特殊符号。在使用字符数据类型时,需要在其前后加上英文单引号或者双引号。 (1)Char:其定义形式为Char(n),当用Char数据类型存储数据时,每个字符和符号占用一个字节的存储空间。n表示所有字符所占的存储空间,n的取值为1~8000。若不指定n值,系统默认n的值为1。若输入数据的字符串长度小于n,则系统自动在其后添加空格来填满设定好的空间;若输入的数据过长,将会截掉其超出部分。如果定义了一个Char数据类型,而且允许该列为空,则该字段被当作Varchar来处理。 (2)Varchar:其定义形式为Varchar(n)。用Char数据类型可以存储长达255个字符的可变长度字符串,和Char类型不同的是Varchar类型的存储空间是根据存储在表的每一列值的字符数变化的。例如定义Varchar(20),则它对应的字段最多可以存储20个字符,但是在每一列的长度达到20字节之前系统不会在其后添加空格来填满设定好的空间,因此使用Varchar类型可以节省空间。 (3)Text:用于存储文本数据,其容量理论上为1~231-1(2,147,483,647)个字节,但实际应用时要根据硬盘的存储空间而定。

11 5.1.1 系统数据类型 5. Unicode 字符数据类型 Unicode 字符数据类型包括Nchar、Nvarchar、Ntext三种:
(1)Nchar:其定义形式为Nchar(n)。它与Char数据类型类似,不同的是Nchar数据类型n的取值为1~4000。Nchar数据类型采用Unicode标准字符集,Unicode标准用两个字节为一个存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时出现中文、英文、法文等,而不会出现编码冲突。 (2)Nvarchar:其定义形式Nvarchar(n)。它与Varchchar数据类型相似,Nvarchar数据类型也采用Unicode标准字符集,n的取值范围为1~4000。 (3)Ntext:与Text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。Ntext数据类型采用Unicode标准字符集,因此其理论上的容量为230-1(1,073,741,823)个字节。

12 5.1.1 系统数据类型 6. 二进制字符数据类型 二进制数据类型包括Binary、Varbinary、Image三种:
(1)Binary:其定义形式为Binary(n),数据的存储长度是固定的,即n+4个字节,当输入的二进制数据长度小于n时,余下部分填充0。二进制数据类型的最大长度(即n的最大值)为8000,常用于存储图像等数据。 (2)Varbinary:其定义形式为Varbinary(n),数据的存储长度是变化的,它为实际所输入数据的长度加上4字节。其他含义同Binary。 (3)Image:用于存储照片、目录图片或者图画,其理论容量为231-1(2,147,483,647)个字节。其存储数据的模式与Text数据类型相同,通常存储在Image字段中的数据不能直接用Insert语句直接输入。

13 5.1.1 系统数据类型 7. 其它数据类型 (1)Sql_variant:用于存储除文本、图形数据和Timestamp类型数据外的其他任何合法的SQL Server数据。此数据类型极大地方便了SQL Server的开发工作。 (2)Table:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。 (3)Timestamp:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器。当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此Timestamp数据列中。如果建立一个名为“Timestamp”的列,则该列的类型将自动设为Timestamp数据类型。 (4)Uniqueidentifier:用于存储一个16字节长的二进制数据类型,它是SQL Server根据计算机网络适配器地址和CPU时钟产生的全局惟一标识符代码(Globally Unique Identifier,简写为GUID)。此数字可以通过调用SQL Server的 newid()函数获得,在全球各地的计算机经由此函数产生的数字不会相同。 (5)XML :可以存储XML数据的数据类型。利用它可以将XML实例存储在字段中或者XML类型的变量中。注意存储在XML中的数据不能超过2GB。 (6)Cursor:这是变量或存储过程OUTPUT 参数的一种数据类型,这些参数包含对游标的引用。使用 Cursor 数据类型创建的变量可以为空。注意:对于 CREATE TABLE 语句中的列,不能使用Cursor 数据类型。

14 5.1.2 自定义数据类型 SQL Server允许用户自定义数据类型,用户自定义数据类型是建立在SQL Server系统数据类型基础上的,当用户定义一种数据类型时,需要指定该类型的名称、建立在其上的系统数据类型以及是否允许为空等。 SQL Server为用户提供了两种方法来创建自定义数据类型: (1)使用SQL Server管理平台创建用户自定义数据类型; (2)利用系统存储过程创建用户自定义数据类型

15 5.1.2 自定义数据类型 (1)使用SQL Server管理平台创建用户自定义数据类型 图5-1 打开用户定义的数据类型窗口
图5-1 打开用户定义的数据类型窗口 图5-2 用户定义的数据类型属性对话框

16 5.1.2 自定义数据类型 (2)利用系统存储过程创建用户自定义数据类型
系统存储过程sp_addtype为用户提供了用T_SQL语句创建自定义数据类型的途径,其语法形式如下: sp_addtype type, system_data_type [, ‘null_type’] [, ‘owner_name’]

17 5.1.2 自定义数据类型 (2)利用系统存储过程创建用户自定义数据类型 例5-1 自定义一个地址(address)数据类型。
程序清单如下: exec sp_addtype address, ‘varchar(80)’, ‘not null’

18 5.2 表操作 表是包含数据库中所有数据的数据库对象。表定义为列的集合,数据在表中是按行和列的格式组织排列的,每行代表惟一的一条记录,而每列代表记录中的一个域。 创建表 创建约束 修改表 查看表 删除表

19 5.2.1 创建表 利用SQL Server管理平台创建表 图5-4 新建表对话框 图5-6 设置字段属性对话框
创建表 利用SQL Server管理平台创建表 在SQL Server管理平台中,展开指定的服务器和数据库,打开想要创建新表的数据库,右击表对象,并从弹出的快捷菜单中选择“新建表”选项,如图5-4所示。在图5-4的对话框中,可以对表的结构进行更改,设置主键及字段属性,使用SQL Server管理平台可以非常直观地修改数据库结构和添加数据。在表中任意行上右击,则弹出一个快捷菜单,如图5-6所示。 图5-4 新建表对话框 图5-6 设置字段属性对话框

20 创建表 2. 利用create命令创建表 使用create命令创建表非常灵活,它允许对表设置几种不同的选项,包括表名、存放位置和列的属性等。 其完整语法形式如下: CREATE TABLE   [database_name.[owner].|owner.]table_name  ({<column_definition>|column_name AS computed_column_expression| <table_constraint>}[,…n])     [ON{ filegroup|DEFAULT}] [TEXTIMAGE_ON { filegroup|DEFAULT}]     <column_definition>::={column_name data_type}    [COLLATE <collation_name>]   [[DEFAULT constant_expression] |[IDENTITY[(seed,increment )[NOT FOR REPLICATION]]]]     [ROWGUIDCOL]   [<column_constraint>][...n]

21 5.2.1 创建表 2. 利用create命令创建表 其中,各参数的说明如下: database_name:用于指定所创建表的数据库名称。
创建表 2. 利用create命令创建表 其中,各参数的说明如下: database_name:用于指定所创建表的数据库名称。 owner:用于指定新建表的所有者的用户名。 table_name:用于指定新建表的名称。 column_name:用于指定新建表的列名。 computed_column_expression:用于指定计算列的列值表达式。 ON {filegroup | DEFAULT}:用于指定存储表的文件组名。 TEXTIMAGE_ON:用于指定 text、ntext 和 image 列的数据存储的文件组。 data_type:用于指定列的数据类型。 DEFAULT:用于指定列的默认值。 constant_expression:用于指定列的默认值的常量表达式、可以为一个常量或NULL或系统函数。 IDENTITY:用于将列指定为标识列。Seed:用于指定标识列的初始值。Increment:用于指定标识列的增量值。 NOT FOR REPLICATION:用于指定列的IDENTITY属性,在把从其他表中复制的数据插入到表中时不发生作用,即不生成列值,使得复制的数据行保持原来的列值。 ROWGUIDCOL:用于将列指定为全局惟一标识行号列(row global unique identifier column)。 COLLATE:用于指定表的校验方式。 column_constraint和table_constraint:用于指定列约束和表约束。

22 创建表 2. 利用create命令创建表 例5-3 创建了一个工人信息表,它包括工人编号、姓名、性别、出生日期、职位、工资和备注信息。 SQL语句的程序清单如下: CREATE TABLE worker (number char(8) not null, name char(8) NOT NULL, sex char(2) NULL, birthday datetime null, job_title varchar(10) null, salary money null, memo ntext null

23 5.2.2 创建约束 约束是SQL Server提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。在SQL SERVER中,对于基本表的约束分为列约束和表约束。 列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名;表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用’,’分隔,定义表约束时必须指出要约束的那些列的名称。 完整性约束的基本语法格式为: [CONSTRAINT constraint_name(约束名)] <约束类型> 约束不指定名称时,系统会给定一个名称。 在SQL Server 2005中有6种约束:主键约束(primary key constraint)、惟一性约束(unique constraint)、检查约束(check constraint)、默认约束(default constraint)、外部键约束(foreign key constraint)和空值(NULL)约束。

24 5.2.2 创建约束 主键(PRIMARY KEY)约束
PRIMARY KEY约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别: ①在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个UNIQUE约束; ②对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。 注意:不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。 PRIMARY KEY既可用于列约束,也可用于表约束。

25 5.2.2 创建约束 主键(PRIMARY KEY)约束
主键的创建操作方法有两种:SQL Server管理平台操作法和Transact-SQL语句操作法。 (1) SQL Server管理平台操作法,如图5-7所示。 图5-7 选择多个字段共同做为主键对话框

26 5.2.2 创建约束 主键(PRIMARY KEY)约束 (2)使用Transact-SQL语句操作法设置主键约束,其语法形式如下:
CONSTRAINT constraint_name PRIMARY KEY [CLUSTERED|NONCLUSTERED] (column_name) PRIMARY KEY用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下: (column_name[,…n])

27 5.2.2 创建约束 主键(PRIMARY KEY)约束 例5-5 建立一个SC表,定义SNO,CNO共同组成SC的主键 程序清单如下:
CREATE TABLE SC (SNO CHAR(5) NOT NULL, CNO CHAR(5) NOT NULL, SCORE NUMERIC(3), CONSTRAINT SC_PRIM PRIMARY KEY(SNO,CNO))

28 5.2.2 创建约束 2. 惟一性约束 惟一性约束用于指定一个或者多个列的组合值具有惟一性,以防止在列中输入重复的值。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。 当使用惟一性约束时,需要考虑以下几个因素: 使用惟一性约束的字段允许为空值; 一个表中可以允许有多个惟一性约束; 可以把惟一性约束定义在多个字段上; 惟一性约束用于强制在指定字段上创建一个惟一性索引; 默认情况下,创建的索引类型为非聚集索引。

29 5.2.2 创建约束 2. 惟一性约束 创建惟一性约束的方法有两种:通过SQL Server管理平台可以完成创建和修改惟一性约束的操作;使用Transact-SQL语句完成惟一性约束的操作。 (1)通过SQL Server管理平台可以完成创建和修改惟一性约束的操作,如图5-8所示。 图5-8 创建惟一性约束对话框

30 5.2.2 创建约束 2. 惟一性约束 例5-6 创建一个学生信息表,其中name字段具有惟一性。 程序清单如下:
(2)使用Transact-SQL语句完成惟一性约束的操作,其语法形式如下: CONSTRAINT constraint_name UNIQUE [CLUSTERED|NONCLUSTERED] (column_name[,…n]) 例5-6 创建一个学生信息表,其中name字段具有惟一性。 程序清单如下: Create table student( id char(8), name char(10), sex char(2), constraint pk_id primary key(id), constraint uk_identity unique(name)

31 5.2.2 创建约束 3. 检查约束 当使用检查约束时,应该考虑和注意以下几点:
检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。 当使用检查约束时,应该考虑和注意以下几点: 一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关; 一个表中可以定义多个检查约束; 每个CREATE TABLE语句中每个字段只能定义一个检查约束; 在多个字段上定义检查约束,则必须将检查约束定义为表级约束; 当执行INSERT语句或者UPDATE语句时,检查约束将验证数据; 检查约束中不能包含子查询。

32 5.2.2 创建约束 3. 检查约束 创建检查约束常用的操作方法有如下两种 :使用SQL Server管理平台创建检查约束;用Transact-SQL语句创建检查约束。 (1)使用SQL Server管理平台创建检查约束,如图5-9所示。 图5-9 创建检查约束对话框

33 5.2.2 创建约束 3. 检查约束 (2)用Transact-SQL语句创建检查约束。
CONSTRAINT constraint_name CHECK [NOT FOR REPLICATION] (logical_expression) 例5-8 建立一个SC表,定义SCORE 的取值范围为0到100之间。 程序清单如下: CREATE TABLE SC (SNO CHAR(5), CNO CHAR(5), SCORE NUMERIC(5,1) CONSTRAINT SCORE_CHK CHECK(SCORE>=0 AND SCORE <=100))

34 5.2.2 创建约束 4. 默认(DEFAULT)约束 使用默认约束时,应该注意以下几点: (1)每个字段只能定义一个默认约束;
默认约束指定在插入操作中如果没有提供输入值时,则系统自动指定值。默认约束可以包括常量、函数、不带变元的内建函数或者空值。 使用默认约束时,应该注意以下几点: (1)每个字段只能定义一个默认约束; (2)如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断; (3)不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上; (4)如果字段定义为用户定义的数据类型,而且有一个默认绑定到这个数据类型上,则不允许该字段有默认约束。

35 5.2.2 创建约束 4. 默认(DEFAULT)约束 创建默认约束常用的操作方法有如下两种:使用SQL Server管理平台创建默认约束;创建默认约束的Transact-SQL语句操作法。 (1)使用SQL Server管理平台创建默认约束,如图5-10所示。 图5-10 创建默认约束对话框

36 5.2.2 创建约束 4. 默认(DEFAULT)约束 (2)创建默认约束的Transact-SQL语句操作法。其语法形式如下:
CONSTRAINT constraint_name DEFAULT constraint_expression [FOR column_name] 例5-10 为 dept字段创建默认约束。 程序清单如下: constraint con_dept default ‘计算机’ for dept

37 5.2.2 创建约束 5. 外部键约束 外键 (FOREIGN KEY) 是用于建立和加强两个表数据之间的链接的一列或多列。外部键约束用于强制参照完整性。 当使用外部键约束时,应该考虑以下几个因素: 外部键约束提供了字段参照完整性; 外部键从句中的字段数目和每个字段指定的数据类型都必须和REFERENCES从句中的字段相匹配; 外部键约束不能自动创建索引,需要用户手动创建; 用户想要修改外部键约束的数据,必须有对外部键约束所参考表的SELECT权限或者REFERENCES权限; 参考同一表中的字段时,必须只使用REFERENCES子句,不能使用外部键子句; 一个表中最多可以有31个外部键约束; 在临时表中,不能使用外部键约束; 主键和外部键的数据类型必须严格匹配

38 5.2.2 创建约束 5. 外部键约束 创建外部键约束常用的操作方法有如下两种:在SQL Server管理平台中添加外部键约束;使用Transact-SQL语句设置外部键约束。 (1)在SQL Server管理平台中添加外部键约束,在SQL Server管理平台中添加外部键约束。如图5-11,5-12所示。 图5-11 选择创建外键约束的字段 图5-12 创建外键约束对话框

39 5.2.2 创建约束 5. 外部键约束 (2)使用Transact-SQL语句设置外部键约束 ,其语法形式如下:
CONSTRAINT constraint_name FOREIGN KEY (column_name[,…n]) REFERENCES ref_table [(ref_column[,…n])] 例5-11 建立一个SC表,定义SNO,CNO为SC的外部键。 程序清单如下: CREATE TABLE SC (SNO CHAR(5) NOT NULL CONSTRAINT S_FORE FOREIGN KEY REFERENCES S(SNO), CNO CHAR(5) NOT NULL CONSTRAINT C_FORE FOREIGN KEY REFERENCES C(CNO), SCORE NUMERIC(3), CONSTRAINT S_C_PRIM PRIMARY KEY (SNO,CNO))

40 5.2.2 创建约束 6. 空值(NULL)约束 空值(NULL)约束用来控制是否允许该字段的值为NULL。NULL值不是0也不是空白,更不是填入字符串的“NULL”字符串,而是表示“不知道”、“ 不确定”或“没有数据”的意思。 当某一字段的值一定要输入才有意义的时候,则可以设置为NOT NULL。如主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用。空值(NULL)约束只能用于定义列约束。 创建空值(NULL)约束常用的操作方法有如下两种: (1)在SQL Server管理平台中添加空值(NULL)约束; (2)使用Transact-SQL语句设置空值(NULL)约束。

41 5.2.2 创建约束 6. 空值(NULL)约束 (1)在SQL Server管理平台中添加空值(NULL)约束。如图5-14所示。

42 5.2.2 创建约束 6. 空值(NULL)约束 (2)使用Transact-SQL语句设置空值(NULL)约束, 其语法形式如下:
[CONSTRAINT <约束名> ][NULL|NOT NULL] 例5-13 建立一个S表,对SNO字段进行NOT NULL约束。 程序清单如下: CREATE TABLE S (SNO CHAR(10) CONSTRAINT S_CONS NOT NULL, SN VARCHAR(20), AGE INT, SEX CHAR(2) DEFAULT ’男’ , DEPT VARCHAR(20))

43 5.2.3 修改表 当数据库中的表创建完成后,可以根据需要改变表中原先定义的许多选项,以更改表的结构。用户可以增加、删除和修改列,增加、删除和修改约束,更改表名以及改变表的所有者等。 1、修改列属性 修改列属性包括以下一些内容: (1)修改列的数据类型; (2)修改列的数据长度; (3)修改列的精度; (4)修改列的小数位数; (5)修改列的为空性。

44 5.2.3 修改表 2、添加和删除列   在SQL Server 2005中,如果列允许空值或对列创建 DEFAULT 约束,则可以将列添加到现有表中。将新列添加到表时,SQL Server 2005数据库引擎在该列为表中的每个现有数据行插入一个值。因此,在向表中添加列时向列添加DEFAULT定义会很有用。如果新列没有 DEFAULT定义,则必须指定该列允许空值。数据库引擎将空值插入该列,如果新列不允许空值,则返回错误。 反之,可以删除现有表中的列,但具有下列特征的列不能被删除: (1)用于索引; (2)用于CHECK、FOREIGN KEY、UNIQUE 或PRIMARY KEY约束; (3)与DEFAULT 定义关联或绑定到某一默认对象; (4)绑定到规则; (5)已注册支持全文; (6)用作表的全文键。

45 5.2.3 修改表 3、增加、修改和删除约束 (2)增加、修改和删除UNIQUE约束。 (3)增加、修改和删除CHECK约束。
3、增加、修改和删除约束   (1)增加、修改和删除PRIMARY KEY 约束。 (2)增加、修改和删除UNIQUE约束。 (3)增加、修改和删除CHECK约束。 (4)增加、修改和删除DEFAULT约束。 (5)增加、修改和删除FOREIGN KEY约束。 (6)增加和修改标识符列。只能为每个表创建一个标识符列和一个 GUID 列。

46 5.2.3 修改表 例 5-14 创建一个雇员信息表,然后在表中增加一个salary字段,删除表中的age字段,并且修改memo字段的数据类型。 SQL语句的程序清单如下: create table employees( id char(8) primary key, name char(20) not null, department char(20) null, memo char(30) null, age int null, alter table employees add salary int null, drop column age, alter column memo varchar(200) null

47 5.2.3 修改表 例 5-15 在S表中增加一个班号列和住址列。 SQL语句的程序清单如下: ALTER TABLE S ADD
CLASS_NO CHAR(6), ADDRESS CHAR(40) 注意:使用此方式增加的新列自动填充NULL值,所以不能为增加的新列指定NOT NULL约束。 例5-16 在SC表中增加完整性约束定义,使SCORE在0-100之间。 ALTER TABLE SC CONSTRAINT SCORE_CHK CHECK(SCORE BETWEEN 0 AND 100)

48 5.2.4 查看表 当在数据库中创建了表后,有时需要查看表的有关信息。比如表的属性、定义、数据、字段属性和索引等。尤其重要的是查看表内存放的数据,另外有时需要查看表与其他数据库对象之间的依赖关系。 1. 查看表的定义 ,如图5-15,5-16所示。 图5-15 选择表格属性对话框 图5-16 表格属性对话框

49 5.2.4 查看表 2. 查看表中存储的数据,如图5-17,5-18所示。 图5-17 选择打开表对话框 图5-18 显示表格数据对话框

50 5.2.4 查看表 3. 查看表与其他数据库对象的依赖关系,如图5-19所示。 图5-19 显示相关性对话框

51 5.2.4 查看表 4. 利用系统存储过程查看表的信息 系统存储过程Sp_help可以提供指定数据库对象的信息,也可以提供系统或者用户定义的数据类型的信息,其语法形式如下: sp_help 例5-17 (1)显示当前数据库中所有对象的信息;(2)显示表Person.Contact 的信息。在SQL Server管理平台的查询窗口中,它们对应的语句和运行结果如图5-20和图5-21所示 图5-20 所有数据库对象显示窗口 图5-21 当前数据库对象显示窗口

52 5.2.5 删除表 1. 利用管理平台删除表 在SQL Server管理平台中,展开指定的数据库和表,右击要删除的表,从弹出的快捷菜单中选择“删除”选项,则出现除去对象对话框,如图5-25所示。 图5-25 删除表对话框

53 5.2.5 删除表 2. 利用DROP TABLE语句删除表 DROP TABLE语句可以删除一个表和表中的数据及其与表有关的所有索引、触发器、约束、许可对象。 DROP TABLE语句的语法形式如下: DROP TABLE table_name 要删除的表如果不在当前数据库中,则应在table_name中指明其所属的数据库和用户名。在删除一个表之前要先删除与此表相关联的表中的外部关键字约束。当删除表后,绑定的规则或者默认值会自动松绑。 例5-18 删除company数据库中的表employee。 程序如下: drop table company.dbo.employee

54 5.3 索引操作 索引是数据库随机检索的常用手段,它实际上就是记录的关键字与其相应地址的对应表。通过索引可大大提高查询速度。此外,在SQL SERVER中,行的唯一性也是通过建立唯一索引来维护的。 使用索引可以大大提高系统的性能,其具体表现在: (1)通过创建惟一索引,可以保证数据记录的惟一性。 (2)可以大大加快数据检索速度。 (3)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。 (4)在使用ORDER BY和GROUP BY子句进行检索数据时,可以显著减少查询中分组和排序的时间。 (5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能

55 5.3.1 创建索引 SQL Server 2005提供了如下几种创建索引的方法: 1. 利用SQL Server管理平台创建索引;
创建索引 SQL Server 2005提供了如下几种创建索引的方法: 1. 利用SQL Server管理平台创建索引; 2. 利用Transact-SQL语句中的CREATE INDEX命令创建索引。 另外,可以在创建表的PRIMARY KEY或UNIQUE约束时自动创建索引。

56 5.3.1 创建索引 1.利用SQL Server管理平台创建索引。 图5-26 选择新建索引选项对话框 图5-27 创建索引对话框
创建索引 1.利用SQL Server管理平台创建索引。 (1)展开指定的服务器和数据库,选择要创建索引的表,展开该表,选择“索引”选项(如图5-26所示),右键单击索引,从弹出的快捷菜单中选择“新建索引”,就会出现新建索引对话框,如图5-27所示。 图5-26 选择新建索引选项对话框 图5-27 创建索引对话框

57 5.3.1 创建索引 1.利用SQL Server管理平台创建索引。 (2)点击“添加”按钮,可选择用于创建索引的字段,如图5-28所示。
创建索引 1.利用SQL Server管理平台创建索引。 (2)点击“添加”按钮,可选择用于创建索引的字段,如图5-28所示。 (3)打开创建索引对话框的选项页框,在此还可以设定索引的属性,如图5-29所示。 图5-28 选择用于创建索引的字段 图5-29 索引对话框的选项页框

58 5.3.1 创建索引 2.利用Transact-SQL语句中的CREATE INDEX命令创建索引
创建索引 2.利用Transact-SQL语句中的CREATE INDEX命令创建索引 CREATE INDEX命令既可以创建一个可改变表的物理顺序的聚集索引,也可以创建提高查询性能的非聚集索引,其语法形式如下: CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) [with [PAD_INDEX] [[,]FILLFACTOR=fillfactor] [[,]IGNORE_DUP_KEY] [[,]DROP_EXISTING] [[,]STATISTICS_NORECOMPUTE] [[,]SORT_IN_TEMPDB]       ] [ ON filegroup ]

59 5.3.1 创建索引 2.利用Transact-SQL语句中的CREATE INDEX命令创建索引
创建索引 2.利用Transact-SQL语句中的CREATE INDEX命令创建索引 例5-19 为表employees创建了一个惟一聚集索引。 程序清单如下: CREATE UNIQUE CLUSTERED INDEX number_ind   ON employees (number) with  pad_index,  fillfactor=20,   ignore_dup_key,   drop_existing,   statistics_norecompute

60 5.3.2 查看、修改和删除索引 利用SQL Server管理平台查看、修改和删除索引。
图5-30 索引属性对话框 图5-31 索引碎片数据管理对话框

61 5.3.2 查看、修改和删除索引 1.利用SQL Server管理平台查看、修改和删除索引。
(2)扩展属性对话框,如图5-32所示,主要包含数据库名称,校对模式等。 通过右键单击索引名称,选择“创建索引脚本到新的查询分析器窗口”,则可以查看创建索引的SQL脚本语句,如图5-33所示。 图5-32 索引扩展属性对话框 图5-33 索引的SQL脚本对话框

62 5.3.2 查看、修改和删除索引 2. 用系统存储过程查看和更改索引名称
系统存储过程sp_helpindex可以返回表的所有索引信息,其语法形式如下; sp_helpindex 另外,系统存储过程sp_rename可以用来更改索引的名称,其语法形式如下: [ , = ] 'object_type' ]

63 5.3.2 查看、修改和删除索引 2. 用系统存储过程查看和更改索引名称
例5-21 使用系统存储过程sp_helpindex 来查看表authors的索引信息。 运行结果如下图所示。 例5-22 将employees表中的索引名称employees_name_index名称更改为employees _name_ind。 程序清单如下: exec sp_rename ‘employees.[employees_name_index]’, ‘employees_name_ ind’, ‘index’

64 5.3.2 查看、修改和删除索引 3.使用Transact-SQL语句中的DROP INDEX命令删除索引
DROP INDEX 'table.index | view.index' [ ,...n ] 其中,table | view用于指定索引列所在的表或索引视图;index用于指定要删除的索引名称。 例5-23 删除表employees中的索引employees_name_index。 程序清单如下: drop index employees.employees_name_index


Download ppt "第5章 表的操作与管理."

Similar presentations


Ads by Google