第 4章 表的创建和管理
4.1 数据类型
4.2 创建表
4.3 创建、删除和修改约束
4.4 增加、删除和修改字段
4.5 查看表格
4.6 删除表
4.1 数据类型
4.1.1 系统数据类型
系统数据类型是 SQL Server预先定义好的,
可以直接使用。
1.整型数据类型
( 1) int( integer),4个字节
( 2) Smallint, 2个字节
( 3) Tinyint, 1个字节
4.1 数据类型
2.浮点数据类型,
用于存储十进制小数, 采用只入不舍的方式
( 1) Real,4个字节的, 最大 7位精确位数 。
( 2) Float:可以精确到第 15位小数, 默认
占用 8个字节的存储空间 。 Float数据类型也可
以写为 float( n) 的形式, n为 1~15之间的整
数值 。 当 n取 1~7时, 系统用 4个字节存储它;
当 n取 8~15时, 用 8个字节存储它 。
4.1 数据类型
( 3) Decimal和 numeric:可以提供小数
所需要的实际存储空间, 可以用 2~17个字节
来存储 。 也可以将其写为 decimal( p,s) 的
形式 。
注意:数值类型的总位数不包括小数 。
例如,decimal( 10,5),表示共有 10位
数,其中整数 5位,小数 5位。
4.1 数据类型
3,字符数据类型
用来存储各种字母、数字符号和特殊符号。
在使用时需要在其前后加上英文单引号或者双
引号。
( 1) Char:占用 1个字节 。
其定义形式为,char( n)
n的取值为 1~8000。 默认 n的值为 1。
4.1 数据类型
( 2) Varchar:可以存储长达 8000个字符的可变长
度字符串, 和 char类型不同 varchar类型根据输入数
据的实际长度而变化 。
其定义形式为,varchar( n)
( 3) Nchar:采用 Unicode( 统一字符编码标准 )
字符集每个 Unicode字符用两个字节为一个存储单位 。
其定义形式为,nchar( n)
( 4) Nvarchar:使用 Unicode字符集的 Varchar数
据类型 。
其定义形式为,nvarchar( n)
4.1 数据类型
4,日期和时间数据类型
( 1) Datetime:占用 8个字节 。
用于存储日期和时间的结合体, 可以存储从公元
1753年 1月 1日零时起 ~公元 9999年 12月 31日 23时
59分 59秒之间的所有日期和时间, 其精确度可达三
百分之一秒, 即 3.33毫秒 。
当存储 datetime数据类型时, 默认的格式是,MM
DD YYYY hh:mm A.M./P.M。 当插入数据或者在其
它地方使用 datetime类型时, 需要用单引号把它括起
来 。
4.1 数据类型
默认 January 1,1900 12:00 A.M。 可以接
受的输入格式如下,Jan 4 1999,JAN 4
1999,January 4 1999,Jan 1999 4、
1999 4 Jan和 1999 Jan 4。 datetime数据类
型允许使用 /,-和,作为不同时间单位间的分隔
符 。
( 2) Smalldatetime:存储从 1900年 1月
1日 ~2079年 6月 6日内的日期。 4个字节。
4.1 数据类型
5,文本和图形数据类型
( 1) Text:容量可以在 1~231-1个字节 。
在定义 Text数据类型时, 不需要指定数据长度,
SQL Server会根据数据的长度自动为其分配空间 。
( 2) Ntext:采用 unicode标准字符集, 用于存储
大容量文本数据 。 其理论上的容量为 230-1( 1,073,
741,823) 个字节 。
( 3) Image:用于存储照片、目录图片或者图画,
其理论容量为 231-1( 2,147,483,647)个字节。
4.1 数据类型
6,货币数据类型
( 1) Money:用于存储货币值, 数值以一个正数
部分和一个小数部分存储在两个 4字节的整型值中,
存储范围为 -922337213685477.5808
~922337213685477.5808,精度为货币单位的万
分之一 。
( 2 ) Smallmoney,其存储范围为 -
214748.3468~214748.3467。
当为 money或 smallmoney的表输入数据时,必须
在有效位置前面加一个货币单位符号(如 $或其它货
币单位的记号)。
4.1 数据类型
7,位数据类型
Bit称为位数据类型, 有两种取值,0和 1。 如
果一个表中有 8个或更少的 bit列时, 用 1个字节
存放 。 如果有 9~16个 bit列时, 用 2个字节存放 。
在输入 0以外的其它值时,系统均把它们当 1
看待。
4.1 数据类型
8,二进制数据类型
( 1) Binary:
其定义形式为 binary( n), 数据的存储长度是固
定的, 即 n+4个字节 。 二进制数据类型的最大长度
( 即 n的最大值 ) 为 8000,常用于存储图像等数据 。
( 2) Varbinary:
其定义形式为 varbinary( n), 数据的存储长度是
变化的, 它为实际所输入数据的长度加上 4字节 。
在输入二进制常量时, 需在该常量前面加一个前缀
0x。
4.1 数据类型
9,特殊数据类型
( 1) Timestamp:也称作时间戳数据类型 。
是一种自动记录时间的数据类型, 主要用于在
数据表中记录其数据的修改时间 。 它提供数据
库范围内的唯一值 。
( 2) Uniqueidentifier:也称作唯一标识
符数据类型 。 Uniqueidentifier用于存储一个
16 字 节 长 的 二 进 制 数 据 类 型, 它是 SQL
Server根据计算机网络适配器地址和 CPU时钟
产 生 的 全 局 唯 一 标 识 符 代 码 ( Globally
Unique Identifier,简写为 GUID) 。
4.1 数据类型
10,新增数据类型
( 1) Bigint:占用 8个字节 。
( 2) sql_variant:用于存储除文本,
图形数据和 timestamp类型数据外的其
它任何合法的 SQL Server数据 。
( 3) table:用于存储对表或者视图处
理后的结果集。
4.1 数据类型
4.1.2 自定义数据类型
1.使用企业管理器创建
2,利用系统存储过程创建
sp_addtype [@typename=] type,
[@phystype=] system_data_type
[,[@nulltype=] ‘null_type’]
[,[@owner=] ‘owner_name’]
4.1 数据类型
?type:指定用户定义的数据类型的名称 。
?system_data_type:指定相应的系统提供
的数据类型的名称及定义 。 注意, 不能使用
timestamp数据类型, 当所使用的系统数据类
型有额外说明时, 需要用引号将其括起来 。
?null_type:指定用户自定义数据类型的 null
属性, 其值可以为 ‘ null’,‘ not null’或者
‘ nonull’。 默认与系统默认的 null属性相同 。
?owner_name:指定用户自定义数据类型的
所有者。
4.1 数据类型
删除用户自定义数据
1.使用企业管理器
2,利用系统存储过程
sp_droptype [@typename=] ‘type’
本章首页
4.2 创建表
表是包含数据库中所有数据的数据库对象,
用来存储各种各样的信息 。
在 SQL Server 2000中, 一个数据库中最多可
以创建 200万个表, 用户创建数据库表时, 最多
可以定义 1024列 。 在同一数据库的不同表中,
可以有相同的字段, 但在同一个表中不允许有
相同的字段, 而且每个字段都要求数据类型相
同 。
4.2 创建表
4.2.1 利用企业管理器创建表
? 默 认 值, 指 定 列 的 默 认 值 。 除 定 义 为
timestamp或带 IDENTITY属性的列以外的任何
列 。 删除表时, 将删除默认值定义 。 只有常量
值 ( 如字符串 ), SQL Server内部函数 ( 如
SYSTEM_USER( )) 或 NULL值可以用作默认值 。
? 精度和小数位数:精度是列的总长度, 包括
整数部分和小数部分的长度之和, 但不包括小
数点;小数位数指定小数点后面的长度 。
4.2 创建表
? 标识:指定列是否是标识列 。 一个表只能创
建一个标识列 。 不能对标识列使用绑定默认值
和 DEFAULT约束 。 必须同时指定种子和增量, 或
者两者都不指定 。 默认值 ( 1,1) 。 能够成为标
识列的数据类型有 int,smallint,tinyint、
numeric和 decimal等系统数据类型;如果其数
据类型为 numeric和 decimal,不允许出现小数
位数 。
? 标识种子:指定标识列的初始值 。
? 标识递增量:指定标识列的增量值 。
4.2 创建表
? 是 RowGuid:指定列是否使用全局唯一标识符 。
? 公式:用于指定计算列的列值表达式 。
? 排序规则:指定列的排序规则 。
说明:在数据库中表名必须是唯一的, 但是
如果为表指定了不同的用户, 就可以创建多个
相同名称的表 。
4.2 创建表
4.2.2 利用 Transact-SQL语言创建表
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 } ]
4.2 创建表
< column_definition >,:=
{ column_name data_type }
[ COLLATE < collation_name > ]
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed,increment )
[ NOT FOR REPLICATION ] ] ] ]
[ ROWGUIDCOL]
[ < column_constraint > ] [,..n ]
4.2 创建表
< column_constraint >,:=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ON {filegroup | DEFAULT} ] ] }
|FOREIGN KEY [( column [,… n]) ]
REFERENCES ref_table [ ( ref_column
[,… n]) ] [NOT FOR REPLICATION]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression ) }
本章首页
4.3 创建、删除和修改约束
约束是 SQL Server提供的自动保持数
据库完整性的一种方法 。
? 列级约束:列级约束是行定义的一部分,
只能够应用在一列上 。
? 表级约束:表级约束的定义独立于列的
定义, 可以应用在一个表中的多列上 。
4.3 创建、删除和修改约束
4.3.1 主键约束
主键能够唯一地确定表中的每一条记录,主键不能
取空值。主键约束可以保证实体的完整性。
1.通过企业管理器完成添加、删除和修改主键的
操作
2.使用 Transact-SQL语句设置主键约束
CONSTRAINT constraint_name
PRIMARY KEY
[CLUSTERED|NONCLUSTERED]
( column_name[,… n])
4.3 创建、删除和修改约束
4.3.2 唯一性约束
唯一性约束用于指定一个或多个列的组合值
具有唯一性,以防止在列中输入重复的值。
? 使用唯一性约束的字段允许为空值;
? 一个表中可以允许有多个唯一性约束;
? 可以把唯一性约束定义在多个字段上;
? 唯一性约束用于强制在指定字段上创建一个
唯一性索引;
? 默认情况下,创建的索引类型为非聚集索引。
4.3 创建、删除和修改约束
1.通过企业管理器完成创建和修改唯一性
约束的操作
2,使用 Transact-SQL语句完成唯一性约束
的操作
CONSTRAINT constraint_name
UNIQUE
[CLUSTERED|NONCLUSTERED]
( column_name[,… n])
4.3 创建、删除和修改约束
4.3.3 检查约束
保证数据库数据的完整性 。
? 一个列级检查约束只能与限制的字段有关;一个
表级检查约束只能与限制的表中字段有关;
? 一个表中可以定义多个检查约束;
? 每个 CREATE TABLE语句中每个字段只能定义一
个检查约束;
? 在多个字段上定义检查约束, 则必须将检查约束
定义为表级约束;
? 当执行 INSERT语句或者 UPDATE语句时, 检查
约束将验证数据;
? 检查约束中不能包含子查询。
4.3 创建、删除和修改约束
1.使用企业管理器创建检查约束
2,用 Transact-SQL语句创建检查约束 。
CONSTRAINT constraint_name
CHECK [NOT FOR REPLICATION]
( logical_expression)
4.3 创建、删除和修改约束
4.3.4 默认约束
? 每个字段只能定义一个默认约束;
? 如果定义的默认值长于其对应字段的允许长
度, 那么输入到表中的默认值将被截断;
? 不能加入到带有 IDENTITY属性或者数据类
型为 timestamp的字段上;
? 如果字段定义为用户定义的数据类型,而且
有一个默认绑定到这个数据类型上,则不允许
该字段有默认约束。
4.3 创建、删除和修改约束
1.使用企业管理器创建默认约束
2.使用 Transact-SQL语句创建默认约束
4.3 创建、删除和修改约束
4.3.5 外键约束
外键约束主要用来维护两个表之间数据的一致性 。
? 外键约束提供了字段参照完整性;
? 外键从句中的字段数目和每个字段指定的数据类型
都必须和 REFERENCES从句中的字段相匹配;
? 外键约束不能自动创建索引, 需要用户手动创建;
? 用户想要修改外键约束的数据, 必须有对外键约束
所参考表的 SELECT权限或者 REFERENCES权限;
? 参 考 同 一 表 中 的 字 段 时, 必 须 只 使 用
REFERENCES子句, 不能使用外键子句;
4.3 创建, 删除和修改约束
? 一个表中最多可以有 31个外键约束;
? 在临时表中, 不能使用外键约束;
? 主键和外键的数据类型必须严格匹配 。
1,在企业管理器中添加外键约束
2,使用 Transact-SQL语句设置外键约束
CONSTRAINT constraint_name
FOREIGN KEY ( column_name[,… n])
REFERENCES ref_table
[( ref_column[,… n]) ] 本章首页
4.4 增加、删除和修改字段
4.4.1 利用企业管理器增加, 删除和修改字

4.4.2 利用 Transact-SQL语言增加, 删除
和修改字段
4.4 增加、删除和修改字段
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [,
scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL } ]
| ADD
4.4 增加、删除和修改字段
{ [ < column_definition > ]
| column_name AS
computed_column_expression
} [,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [,...n ] }
}
本章首页
4.5 查看表格
4.5.1 查看表格的定义
4.5.2 查看表格中的数据
4.5.3 查看表格与其它数据库对象的依赖关

4.5.4 利用系统存储过程 Sp_help查看表的
信息
本章首页
4.6 删除表
4.6.1 利用企业管理器删除表
4.6.2 利用 Transact-SQL语言删除表
DROP TABLE table_name
本章首页