第 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
本章首页