二、创建和使用表
表是包含数据库中所有数据的数据库对象,设计完数据库后就可创建数据库中将存储
数据的表。任何有相应权限的用户都可以对之操作,除非它已被删除。
表是数据的集合,由行和列组成的,行被称为记录,是组织数据的单位;列被称为字
段,每一列表示记录的一个属性。在特定表中,列名是唯一的,但相同的列名可以在数据
库中的不同表中使用。表存储在数据库文件中,每个表至多可定义 102 列。 必须为每列指
定数据类型。(链接 SQL Server2000 数据类型)
2.1 创建表
用户可以使用企业管理器或 T-SQL 语句中的 CREATE TABLE 命令创建表。本节以创
建 StudentInfo 数据库中相关表为例。
1. 使用企业管理器创建表
比如在这个系统中,创建表可以这样操作,在 SQL Server 企业管理器中,展开指定的
服务器和数据库,打开 StudentInfo 数据库,右键单击表对象,从弹出的快捷菜单中选择“新
建表”命令,就会出现“表设计器”对话框,如图 2-1 所示。
2-1 图表设计器
在对话框中,可以定义列的以下属性:;列名称、数据类型、长度、精度、小数位数、
是否允许为空、默认值、标识列、标识列的初始值、标识列的增量值和是否有行的标识。
然后根据提示进行设置。输入完成后,单击“保存”按钮,将弹出“选择名称”对话框,如图 2-
2 所示。输入 Student,单击“确定”按钮。这样我们就把 Student 表创建好了。
图
2-2
保存
student
表
2.使用 CREATE TABLE 命令创建表(链接 CREATE TABLE 语法)
创建 Student 表语法如下:
CREATE TABLE Student
(
Sno char(10) PRIMARY KRY,
Sname char(20) NOT NULL,
Ssex char(1) NOT NULL CHECK(Ssex=’F’ or Ssex=’M’),
Sclass char(8) NOT NULL ,
Sdept char(10) NOT NULL DEFAULT ‘Computer’
)
其中:
Sno char(10) PRIMARY KRY 表示:定义列 Sno 为表 Student 的主键。用来标识表中的
每一条记录。
CHECK(Ssex=’F’ or Ssex=’M’)表示:定义列 Ssex 可取值范围为’F’或’M’。
DEFAULT ‘Compute’表示:当没有给列 Sdept 赋值时,则取默认值’Compute’。
2.2 修改表
在 Student 表创建以后,如果发现有令人不满意的地方,则我们可以对其进行修改,修
改表结构有两种方法:使用企业管理器或 T-SQL 语句的 ALTER TABLE 命令。
1.使用企业管理器修改表结构
在企业管理器中,展开 Student 表所在的数据库 StudentInfo,右键单击表 Student,在系
统弹出的快捷菜单中选择“设计表”命令,系统会自动弹出如图 2-3 所示的窗口。
图 2-3 设计表窗口
可以在该窗口中,设置 Student 表的以下属性:增加列、删除列、修改列的名称、数据
类型、数据长度以及是否为空。修改完成后,单击工具拦上的“保存“按钮即可。
2.使用 ALTER TABLE 命令修改表,语法如下:
! "#$%
!&!'!$(
&')*'+!
&*'+!,
'!-.&/!&!'!
/
其中各参数的意义与创建表中各参数意义相同,这里不在介绍。
例如,将 Course 表中的 Ctime 列删除。T-SQL 语句如下:
ALTER TABLE Course
DROP COLUMN Ctime
2.3 删除表
有时需要删除表。当删除表时,表的结构定义、数据、约束、和基于表的视图、索引
都将永久地从数据库中删除,原来存放表的空间将用来存放其他表。
1.使用企业管理器删除表
例如,我们现在要删除这个系统中的 Teacher 表:在 SQL Server 企业管理器中,展开
指定的服务器,打开数据库 StudentInfo,用右键单击 Teacher 表,从弹出的快捷菜单中单击
删除“命令”,则会出现“除去对象”对话框,单击“全部除去”,这样就删除 Teacher 表。
2.使用 DROP TABLE 语句删除表
语法格式如下:
DROP TABLE table_name [,…n ]
其中,“table_name0指出要删除表的名称。
例如,要删除 Teacher 表,可执行下述 SQL 语句:
DROP TABLE Teacher
也可以使用该命令同时删除多个表,只需要在删除的表名称之间用逗号隔开即可。
SQL Server 2000 数据类型
每一种语言都定义了自己的数据类型,数据类型决定了数据在计算机中的存储格式,
代表不同的信息类型。在 SQL Server 2000 中定义了 25 种系统数据类型,同时还允许用户
自定义数据类型。
1.系统数据类型:
1).二进制数据类型
二 进 制 数 据 是 一 些 用 于 十 六 进 制 表 示 的 数 据 。 二 进 制 数 据 类 型 包 括 三 种 :
binary、varbinary 和 image。
binary[(n)]:固定长度的 n 个字节二进制数据,最大长度可达 8KB.
varbinary[(n)]:n 个字节可变长度二进制数据,其最大长度不得超过 8KB
image:可用于存储字节超过 8KB 的数据,如 Mircosoft Word 文档、Mircosoft Excel 图
表以及图像数据等,其最大长度为 2
31
-1 个字节。
2).整数数据类型
整数数据类型为五种:bit、int、bigint、smallint、tinyint。
bit:bit 型数据的值只能为 0 或 1.通常使用 bit 类型的数据表示真假逻辑关系,如 on/
off、yes/no、ture/false 等。不能对 bit 类型的列使用索引。
int:可以存储从-2
31
到 2
31
-1 范围内的全部正负数。int 型数据占用的存储空间大小为 4
个字节。
bigint:是 SQL Server 2000 引入的全新数据类型,可以存储从-2
63
到 2
63
-1 范围内的全
部正负数,所占存储空间大小为 8 个字节。
samllint:存储从-2
15
到 2
15
-1 范围内的全部正负数,所占存储空间大小为 2 个字节。
tinyint:可存储 0~255 之间的所有整数,所占存储空间大小为 1 个字节。
3).浮点数据类型
浮点数据类型包括 float 和 real 两种类型,用于存储范围非常大的数字。
float:该类型数据范围是-1.79E+308~1.79E+308。
real:该类型数据范围是-3.40E+38~3.40E+38,占 4 个字节的存储空间。
4).精确小数数据类型
精确小数数据类型包括 decimal 和 numeric 两种,可以精确制定小数点两边的总位数和
小数点右边的位数。这两种数据的取值范围都是-1038-1 到 1038-1。
decimal 和 numeric 的区别在于:numeric 类型的列可以带有 IDENTITY 关键字。
5).货币数据类型
货币数据类型专门用于货币数据处理,包括 money 和 smallmoney。
money:以 money 数据类型存储的货币值得方位从-2
63
到 2
63
-1,精确到货币单位的
1%。noney 数据类型要求由两个 4 字节整数构成,前面的一个 4 个字节表示货币值的整数
部分,后面的 4 字节表示货币值的小数部分。
smallmoney:以 smallmoney 数据类型存储的货币值介于-214748.3648~214748.3647 之
间,精确到货币单位的 1%。smallmoney 数据类型要求由两个 2 字节整数构成,前面的一个
2 个字节表示货币值的整数部分,后面的 2 字节表示货币值的小数部分。
6).日期/时间数据类型
日期/时间数据类型可以存储日期和时间的组合数据,包括 datetime 和 smalldatetime 两
种数据类型。
datetime:存储从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到
0.00333s 或是 3.33ms。每个 datetime 类型的数据占 8 个字节的存储空间。
smalldatetime:存储从 1900 年 1 月 1 日到 2079 年 12 月 31 日的日期和时间数据,可以
精确到分钟。每个 smalldatetime 类型的数据占 4 个字节的存储空间。
7).字符数据类型
字符型数据是由字母、数字和符号组合而成。字符数据类型可分 3 种:
char[(n)]:使用固定长度来存储字符,每个字符占用一个字节的存储空间,其最大长
度为 8000 个字符。利用 char 数据类型来定义表列或变量时,应该给定数据的最大长度,例
如有这样的定义:declare @name char(10)。
varchar[(n)]:用于存储最长可达 8000 字符的变长字符型数据。varchar 数据类型的存
储空间随存储的每一个数据的字符数的不同而变化。
text:专门用于存储数量庞大的变长字符数据。最大长度可达 2
31
-1。
8).Unicode 数据类型
Unicode 数据类型用于存储要用两个字节才能存储的双字节字符,例如汉字、日文或
者韩文等。Unicode 数据类型包括 nchar、nvarchar 和 ntext。
nchar(n):固定长度的 Unicode 数据,括号中的 n 用来定义字符数据的最大长度。n 的
取值范围是 1~4000。
nvarchar(n):用于存储可变长度的 Unicode 数据,括号中的你用来定义字符数据的最
大长度。n 的取值范围是 1~4000。
ntext:用于存储可变长度的 Unicode 数据,起最大长度突破了前两种数据类型的规定,
最多可以存储 2
30
-1 个 Unicode 数据。
9).sql_variant 数据类型
sql_variant 数据类型可以用在列、参数、变量和函数返回值中,以 sql_variant 为数据类
型的数据可以存储除 text、ntext、image 和 sql_variant 数据类型以外的各种数据。
2.用户自定义数据类型
用户定义的数据类型总是根据基本数据类型进行定义的。它们提供了一种机制,可以
将一个名称用于一个数据类型,这个名称更能清楚地说明该对象中保存的值的类型。这样
程序员和数据库管理员就能更容易地理解以该数据类型定义的对象的意图。
用户定义的数据类型使表结构对程序员更有意义,并有助于确保包含相似数据类的列
具有相同的基本数据类型。
提示:用户定义数据类型基于 SQL Server 2000 中的系统数据类型。当多个表
的列中要存储同样类型的数据,且想确保这些列具有完全相同的数据类型、
长度和为空性时,可使用用户定义数据类型.例如,可以基于 char 数据类型
创建名为 postal_code 的用户定义数据类型。
创建用户定义的数据类型时必须提供以下 3 个参数:
名称
新数据类型所依据的系统数据类型
为空性(数据类型是否允许空值) 如果为空性未明确定义,系统将依据数据库或
连接的 ANSI Null 默认设置进行指派。
如果用户定义数据类型是在 model 数据库中创建的,它将作用于所有用户定义的新数
据库中。如果数据类型在用户定义的数据库中创建,则该数据类型只作用于此用户定义的
数据库。
#1%通过企业管理器来创建用户定义的数据类型
使用企业管理器创建用户定义的数据类型的操作步骤如下:
1) 展开服务器组,然后展开服务器。
2) 展开“数据库”文件夹,再展开要在其中创建用户定义的数据类型的数据库,例如
test。