在使用数据库的过程中,接触最多的就是数据库中的表。表是数据存储的地方。是数据库中最重要的部分,管理好表也就管理好了数据库。本章将介绍如何创建和管理数据库表。
表是由行和列组成的。创建表的过程主要就是定义表的列的过程,为此,应先了解表的列的属性。
7.1.1 列的属性 表的列名在同一个表中具有惟一性,同一列的数据属于同一种数据类型。除了用列名和数据类型来指定列的属性外,还可以定义其它属性:NULL 或NOT NULL 属性和IDENTITY 属性。
(1) NULL 或NOT NULL 如果表的某一列被指定具有NULL 属性,那么就允许在插入数据时省略该列的值。反之,如果表的某一列被指定具有NOT NULL 属性,那么就不允许在没有指定列缺省值的情况下插入省略该列值的数据行。在SQL Server 中,列的缺省属性是NOT NULL。要设置缺省属性为NULL 或NOT NULL,可以在Enterprise Manager 中修改数据库属性选项中的“ANSI null default”为真或假。也可以使用如下两种语句来设定:
- set ansi_null_dflt_on 或set ansi_null_dflt_off;
- sp_dboption database_name, ‘ANSI null default’, true/false。
(2) IDENTITY IDENTITY 属性可以使表的列包含系统自动生成的数字。这种数字在表中可以惟一标识表的每一行,即表中的每一行数据在指定为IDENTITY 属性的列上的数字均不相同。指定了IDENTITY 属性的列称为IDENTITY 列。当用IDENTITY 属性定义一个列时,可以指定一个初始值和一个增量。插入数据到含有IDENTITY 列的表中时,初始值在插入第一行数据时使用,以后就由SQL Server 根据上一次使用的IDENTITY 值加上增量得到新的IDENTITY值。如果不指定初始值和增量值,则其缺省值均为1。 IDENTITY 属性适用于INT、 SMALLINT、 TINYINT、 DECIMAL (P,0)、N::::::? UMERIC (P,0)数据类型的列。 注意:一个列不能同时具有NULL属性和IDENTITY属性,只能二者选其一。
7.1.2 用CREATE TABLE 命令创建表 用CREATE TABLE 命令创建表快捷、明了。其语法如下: CREATE TABLE [database_name.[owner].| owner.] table_name ( { | column_name AS computed_column_expression | } [,...n] ) [ON {filegroup | DEFAULT} ] [TEXTIMAGE_ON {filegroup | DEFAULT} ] ::= { column_name data_type } [ [ DEFAULT constant_expression ] | [ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ] ] [ ROWGUIDCOL ] [ COLLATE < collation_name > ] [ ] [ ...n] 各参数说明如下:
- database_name
指定新建的表属于哪个数据库。如果不指定数据库名,就会将所创建的表存放在当前数据库中。
- owner
指定数据库所有者的用户名。
- table_name
指定新建的表的名称,最长不超过128 个字符。 对数据库来说,database_name.owner_name.object_name 应该是惟一的。
- column_name
指定新建的表的名称,最长不超过128 个字符。 对数据库来说,database_name.owner_name.object_name 应该是惟一的。
- computed_column_expression
指定计算列(Computed column)的列值的表达式。表达式可以是列名、常量、变量、函数等或它们的组合。所谓计算列是一个虚拟的列,它的值并不实际存储在表中,而是通过对同一个表中其它列进行某种计算而得到的结果。例如:员工信息表中存储了员工的雇佣日期,那么员工的工龄就可以通过表达式“雇佣日期当前日期”计算出来,则工龄列就可作为一个计算列。
- ON {filegroup | DEFAULT}
指定存储表的文件组名。如果使用了DEFAULT 选项或省略了ON 子句,则新建的表会存储在默认文件组中。
- TEXTIMAGE_ON
指定TEXT、NTEXT、 和IMAGE 列的数据存储的文件组。如果无此子句,这些类型的数据就和表一起存储在相同的文件组中。
- data_type
指定列的数据类型
- DEFAULT
指定列的缺省值。当输入数据时,如果用户没有指定列值,系统就会用设定的缺省值作为列值。如果该列没有指定缺省值但允许NULL 值,则NULL 值就会作为缺省值。其中缺省值可以为常数、NULL 值、SQL Server 内部函数(如GETDATE()函数)、NILADIC 函数等。
- constant_expression
列缺省值的常量表达式,可以为一个常量或系统函数或NULL。
- IDENTITY
指定列为IDENTITY 列。一个表中只能有一个IDENTITY 列。
- seed
指定IDENTITY 列的初始值。
- increment
指定IDENTITY 列的增量。
- NOT FOR REPLICATION
指定列的IDENTITY 属性在把从其它表中复制的数据插入到表中时不发生作用,即不足的生成列值,使得复制的数据行保持原来的列值。
- ROWGUIDCOL
指定列为全球惟一鉴别行号列(ROWGUIDCOL是Row Global Unique Identifier Column 的缩写)。此列的数据类型必须为UNIQUEIDENTIFIER 类型。一个表中数据类型为UNIQUEIDENTIFIER 的列中只能有一个列被定义为ROWGUIDCOL 列。ROWGUIDCOL 属性不会使列值具有惟一性,也不会自动生成一个新的数值给插入的行。需要在INSERT 语句中使用NEWID()函数或指定列的缺省值为NEWID()函数。
- COLLATE指明表使用的校验方式。
- column_constraint 和table_constraint
指定列约束和表约束,我们将在下一节中介绍其具体定义。 其余参数将在后面的章节中逐步讲述。
注意:一个表至少有一列,但最多不超过1024个列。 每个数据库中最多可以创建200万个表。 表在存储时使用的计量单位是盘区(Extent)。一个盘区分为8个数据页,每页8KB字节。在创建新表时,会分配给它一个初始只为一个盘区的存储空间。当增加表的存储空间时,以盘区为单位增加。
[1] [2] 下一页
关注此文的读者还看过:
- 2010-4-1 18:12:45 预防非法表D99_Tmp,kill_kk的建立
- 2008-4-23 15:53:39 SQL Server数据库超级管理员账号防护知识
- 2008-4-11 21:37:35 SQL Server 2005数据库镜像配置脚本示例
- 2008-4-4 9:12:54 讲解如何实现互联网上数据库的安全
- 2008-4-1 11:07:24 SQL 2005数据库转到SQL 2000的步骤讲解
- 2008-3-31 12:39:45 SQL Server自动生成日期加数字的序列号
- 2008-3-31 12:39:07 SQL Server 2000的数据库容量究竟是多大
- 2008-3-18 18:01:49 SQL Server 2005数据库的同义词Bug 讲解
|