SQL Server 创建和修改数据表

一.CREATE语句(创建)

一、数据库存储结构          SQL Server 7.0中的每个数据库有多个操作组成,数据库的所有资料、对象和数据库操作日志均存储在这些操作中。根据这些的作用不同,可以将它们划分为以下三类:
?        主数据文件:每个数据库有且只有一个主数据文件,它是数据库和其它数据文件的起点。主数据文件的扩展名一般为.mdf;       
?        辅数据文件:用于存储主数据文件中未存储的剩余资料和数据库对象,一个数据库可以没有辅数据文件,但也可以同时拥有多个辅数据文件。辅数据文件的多少主要根据数据库的大小、磁盘存储情况和存储性能要求而设置。辅数据文件的扩展名一般为.ndf;
?        日志文件:存储数据库的事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库。日志文件的扩展名一般为.ldf。
每个数据库中至少两个文件:主数据文件和日志文件。
SQL Server数据库文件除操作系统所赋予的物理文件名称外,还有一个逻辑名称。数据库的逻辑名称应用于Transact-SQL语句中。例如,对于 master系统数据库,master为其逻辑名称,使用Transact-SQL语句操作数据库时,均使用该名称。而对应的物理文件名称为 master.mdf、其日志文件名称为master.ldf。
为了管理方便,可将多个数据库文件组织为一组,称作数据库文件组。文件组能够控制 各个文件的存放位置,其中的每个文件常建立在不同的驱动器上,这样可以减轻每个磁盘驱动器的存储压力,提高数据库的存储效率,从而达到提高系统性能的目 的。SQL Server采用比例填充策略使用文件组中的每个文件提供的存储空间。

1.创建DataBase

图片 1

在SQL Server中建立文件和文件组时,应注意以下两点:
?        每个文件或文件组只能属于一个数据库,每个文件也只能成为一个文件组的成员,文件和文件组不能跨数据库使用;
?        日志文件是独立的,它不能成为文件组的成员。也就是说,数据库的资料内容和日志内容不能存入相同的文件或文件组。

1.CONTAINMENT

  SQL Server 2012 新功能 , 默认值是OFF 。(太高级 书上也没有详细介绍)。

SQL Server中的数据库文件组有以下三种类型:
?        主文件组:其中包数据库的主数据文件和不属于其它文件组的数据库文件,数据库系统表的所有页面存储在主文件组中;
?        用户定义文件组:数据库创建语句(CREATE DATABASE)或修改语句(ALTER DATABASE)中使用FILEGROUP关键词所指定的文件组;
?        默认文件组:在创建数据库对象时,如果没有为它们指定文件组,它们将被存储在默认文件组中。可以使用ALTER DATABASE语句修改数据库的默认文件组设置,但每个数据库同时最多只能有一个默认文件组。当数据库没有指定默认文件组时,主文件组将被作为默认文件 组使用。
由于默认文件组的特殊作用,所以在创建数据库对象时,即使不指定用户文件组,SQL Server也能照常执行。

2.ON

  ON用于两个地方,第一个是存储数据的文件的位置,第二个是存储日志的文件的位置。 ON 后面的 PRIMARY的概念:希望将所有的内容存放在一个文件里。

1.使用Transact-SQL语句建立数据库
  CREATE DATABASE 语句的语法格式为:

3.NAME

  一个逻辑名称,即SQL Server在内部使用该名称引用该文件。当需要修改数据库大小时,需要使用这个名称

图片 2CREATE DATABASE database_name
图片 3[ ON [PRIMARY]
图片 4        [ <filespec> [,图片 5n] ]
图片 6        [, <filegroup> [,图片 7n] ]
图片 8]
图片 9[ LOG ON { <filespec> [,图片 10n]} ]
图片 11[ FOR LOAD | FOR ATTACH ]
图片 12<filespec> ::=
图片 13  ( [ NAME = logical_file_name, ]
图片 14  FILENAME = 'os_file_name'
图片 15  [, SIZE = size]
图片 16  [, MAXSIZE = { max_size | UNLIMITED } ]
图片 17  [, FILEGROWTH = growth_increment] ) [,图片 18n]
图片 19<filegroup> ::=
图片 20FILEGROUP filegroup_name <filespec> [,图片 21n]
图片 22

4.FILENAME

  实际的操作系统文件在磁盘的名字,如果不写默认放在安装SQL Server的文件夹中,默认的数据库文件是.mdf后缀,日志是.ldf文件。

其中,database_name为新建数据库的逻辑名称,在一个SQL Server上,必须保证各数据库名称是唯一的。
ON 子句显示指定存储数据库资料部分所使用的数据文件和文件组列表,PRIMARY关键词说明其后的数据文件属于主文件组。如果PRIMARY关键词未被指 定,则关键词CREATE DATABASE后的第一个文件列表将成为主数据文件。<filespec>定义数据文件列表中各数据文件项,有多个数据文件项时,相互之间 以逗号分隔。
其中,logical_file_name参数指出数据文件的逻辑名称,数据文件的逻辑名称应用在Transact-SQL语句中。在同一个数据库中,必须保持数据文件的逻辑名称是唯一的。
os_file_name参数说明数据文件对应的操作系统文件名称,即数据文件的物理文件名称及其路径。
size 参数指定数据文件的初始长度,其单位为MB或KB,默认时为MB。对于主数据文件,其size参数的最小值应等于model数据库中主数据文件的长度。对 于其它数据文件,其长度最小为512KB。size参数默认时,对于辅数据文件和日志文件,SQL Server将其长度设置为1MB,而对于主数据文件,SQL Server将其长度设为model数据库中主数据文件的长度。
SQL Server中,如果打开数据库的autoshrink选项,当数据库文件空间用尽时,系统将自动增加数据文件的大小。max_size参数定义数据文件 可以增加到的最大尺寸,其单位为MB或KB。如果未定义max_size参数,数据库文件的长度可根据需要一直增加,直到磁盘空间用尽为止。这时它等同于 MAXSIZE = UNLIMITED。
growth_increment参数说明数据文件空间的每次增加量,其单位为MB,KB或%,默认为 MB。使用%时说明数据文件每次增加的长度等于增加时文件现有长度的百分比,growth_increment参数的默认值为10%。用MB或KB表示 时,其增加值应为64KB或其倍数。
ON子句中的<filegroup>参数用于指出数据库的数据文件组,其中,filegroup_name为文件组名称。文件组中各文件的定义格式与上面介绍的数据文件的定义格式相同。
CREATE DATABASE语句中的LOG ON子句用于定义数据库日志文件。各个日志文件的定义格式与数据文件相同。当未使用LOG ON子句指定日志文件时,SQL Server将自动为数据库建立一个日志文件,文件名称由系统产生,其长度等于数据库所有数据文件长度之和的25%。

5.SIZE

  数据库大小,如果没写,默认与用图形创建的大小相同。

SQL Server创建一个数据库时要经过以下两个步骤: ① 使用model数据库拷贝初始化新建立的数据库,用户在model数据库中所建立的数据库对象也一并被拷贝到新建数据库中。此外,新建数据库还继承了 model中的各种数据库选项设置,如果model数据库选项设置被修改,它只影响修改后所建立的数据库,已经建立的数据库的各种选项不再发生变化了;
② 用空白页面填充数据库中的自由空间。
(1)在创建数据库时,如果省略了CREATE DATABASE语句中的所有可选参数,即使用下面的语句格式,它所创建的数据库大小完全等同于model数据库:
CREATE DATABASE MYDB1
GO
   (2)下面例子在创建数据库MYDB2时指定文件组,其数据文件有主文件组和MYDB2_GROUP文件组组成。MYDB2数据库所包含的数据文件和日志文件,以及它们的参数如图所示:

6.MAXSIZE  

  允许数据库的最大大小。

图片 23CREATE DATABASE MYDB2
图片 24        ON
图片 25                PRIMARY(
图片 26                                NAME = MYDB2_P1_dat,
图片 27                                FILENAME = ‘c:mssql7dataMYDB2_P1.mdf’,
图片 28                                SIZE = 5,
图片 29MAXSIZE = 10,
图片 30FILEGROWTH = 20%
图片 31),
图片 32
图片 33(NAME = MYDB2_P2_dat,
图片 34                                  FILENAME = ‘c:mssql7dataMYDB2_P2.ndf’,
图片 35                                 SIZE = 5,
图片 36MAXSIZE = 10,
图片 37FILEGROWTH = 1MB
图片 38),
图片 39
图片 40FILEGROUP MYDB2_GROUP(
图片 41                 NAME = MYDB2_S1_dat,
图片 42                                  FILENAME = ‘c:mssql7dataMYDB2_S1.ndf’,
图片 43                 SIZE = 10,
图片 44                 MAXSIZE = 50,
图片 45                 FILEGROWTH = 10
图片 46                 ),
图片 47
图片 48(NAME = MYDB2_S2_dat,
图片 49FILENAME = ‘c:mssql7dataMYDB2_S2.ndf’,
图片 50SIZE = 20,
图片 51MAXSIZE = 100,
图片 52FILEGROWTH = 20
图片 53)
图片 54Go
图片 55

7.FILEGROWTH

  提供一个值来说明文件每次增大多少字节或者多少百分比。

MYDB2数据库文件
        主文件组        MYDB2_GROUP文件组        日志文件
逻辑名        MYDB2_P1_dat        MYDB2_P2_dat        MYDB2_S1_dat        MYDB2_S2_dat        MYDB2_log
文件名        C:mssql7data
MYDB2_P1.mdf        c:mssql7data
MYDB2_P2.ndf        C:mssql7data
MYDB2_S1.ndf        c:mssql7data
MYDB2_S2.ndf        c:mssql7data
MYDB2_log.ldf
初始长度        5MB        5MB        10MB        20MB        10MB
最大长度        10MB        10MB        50MB        100MB        无限制
增    量        20%        1MB        10MB        20MB        10%
2.使用Transact-SQL语句修改数据库
ALTER DATABASE 语句的语法格式为:

8.LOG ON   

  LOG ON 选项允许指定哪些文件需要日志,以及这些日志位于什么位置。

图片 56ALTER DATABASE database
图片 57{    ADD FILE <filespec> [,图片 58n] [TO FILEGROUP filegroup_name]
图片 59    | ADD LOG FILE <filespec> [,图片 60n]
图片 61    | REMOVE FILE logical_file_name 
图片 62    | ADD FILEGROUP filegroup_name
图片 63    | REMOVE FILEGROUP filegroup_name
图片 64    | MODIFY FILE <filespec>
图片 65    | MODIFY FILEGROUP filegroup_name filegroup_property
图片 66}
图片 67<filespec> ::=
图片 68(NAME = logical_file_name
图片 69  [, FILENAME = 'os_file_name' ]
图片 70  [, SIZE = size]
图片 71  [, MAXSIZE = { max_size | UNLIMITED } ]
图片 72  [, FILEGROWTH = growth_increment] )
图片 73

9.COLLATE

  该选项处理排序,字母大小,以及是否对重音敏感的问题。

 

 

图片 74图片 75

 

其中,database为待修改的数据库名称。
ADD FILE子句指出向数据库中添加数据文件,TO FILEGROUP说明新添加数据文件所属的文件组名称。
ADD LOG FILE子句指出向数据库中新添加的日志文件项。
REMOVE FILE子句指出从数据库中删除文件,在删除后,SQL Server将该文件对应的物理文件一并从操作系统中删除。
注意:① 当数据文件内容不为空时,不能将它们从指定数据库中删除;
② 当数据文件为主数据文件或数据库日志文件时,不能将它们从指定数据库中删除;
③ 当数据文件所属的文件组为默认文件组并且此数据文件是该默认文件组的唯一成员时,不能将它从指定数据库中删除。

2.创建表

图片 76

 

ADD FILEGROUP子句说明向数据库中添加文件组。
REMOVE FILEGROUP子句说明从数据库中删除文件组,在删除时一并删除文件组中所有数据文件对应的操作系统文件。
注意:只有当文件组中所有的数据文件为空时才能将它们从数据库中删除。

 IDENTITY

  设定一个列为标识列,开始计数的数字称为种子值,每行增加或减少的数量称为增量。

  标识列必须是数值类型。

 图片 77

   MODIFY FILE指出修改数据文件,文件名称由<filespec>中的NAME参数指定。
注意:① 每次只能对数据文件的FILENAME、SIZE、FILEGROWTH和MAXSIZE中
          的一项进行修改;
      ② 使用ALTER DATABASE语句改变数据文件大小时,只能增加不能减少。

二.ALTER语句(修改)

   ALTER语句可以修改数据库和表大小,文件位置或其他特性。

  修改数据库的大小:

  图片 78

  修改表(增加一列)

  图片 79

   MODIFY FILEGROUP子句指出待修改的文件组,其中filegroup_name为文件组名称,file_property说明修改后的文件组属性,其取值包含以下几种:
?        READONLY:将文件组设置为只读文件组,之后将禁止对其中的数据库对象进行修改。数据库中的主文件组不能设置为只读文件组;
说明:如果将主文件组被设置为只读文件组,所有用户不能在该数据库中再创建任何新的数据库对象和登录标识,或重新编译存储过程,因为这些工作都需要修改数据库中的系统表。
?        READWRITE:删除文件中的只读属性,之后可对该文件组进行读、写操作;
?        DEFAULT:将指定文件组设置为数据库的默认文件组,每个数据库中只能有一个默认文件组。
(1)向MYDB2中添加一个数据文件MYDB2_P3_dat,其大小为10MB,执行后此数据文件被添加到主文件组[PRIMARY]中:

三.DROP语句(删除)

图片 80

图片 81

 

图片 82ALTER DATABASE MYDB2
图片 83        ADD FILE(
图片 84                          NAME = MYDB2_P3_dat,
图片 85                FILENAME = ‘c:mssql7dataMYDB2_P3.ndf’,
图片 86                          SIZE = 10MB,
图片 87                          MAXSIZE = 100MB,
图片 88                          FILEGROWTH = 2MB
图片 89                          )
图片 90GO
图片 91

四.使用管理界面来创建(推荐)

 

(2)向MYDB2中添加一个日志文件MYDB2_LOG2:

图片 92ALTER DATABASE MYDB2
图片 93        ADD LOG FILE
图片 94  (NAME = MYDB2_LOG2,
图片 95    FILENAME = ‘c:mssql7dataMYDB2_LOG2.ldf’, 
图片 96         SIZE = 10MB,
图片 97    MAXSIZE = 50MB,
图片 98    FILEGROWTH = 2MB
图片 99)
图片 100

3)将数据库MYDB2中的文件组MYDB2_GROUP设置为默认文件组:
ALTER DATABASE MODIFY FILEGROUP MYDB2_GROUP DEFAULT
3.使用Transact-SQL语句删除数据库
  DROP DATABASE语句的语法格式为:
DROP DATABASE database_name [,...n]
其中,database_name为待删除的数据库名。在SQL Server中只有系统管理员和数据库所有者才有删除数据库的权限。
(1)将以上建立的数据库MYDB2删除:
DROP DATABASE MYDB2
4.使用系统存储过程检索数据库的定义信息
SQL Server提供了下列系统存储过程和语句,让用户检索服务器上的数据库定义信息以及每个数据库文件空间的使用情况:
?        sp_helpdb:检索服务器上的所有数据库信息及单个数据库的定义信息;对应的语法格式为:sp_helpdb [‘name’]
其中,name参数为选项,当提供该参数时,sp_helpdb检索name参数指定的数据库定义信息,否则它检索服务器上的所有数据库信息;
?        sp_spaceused:检索数据库中资料空间的使用情况以及表所占用的空间;对应的语法格式为:sp_spaceused [‘objname’] [,’updateusage’]
其中,objname是数据库中的表名,它要求sp_spaceusage显示系统分配给该表的空间及其使用状况。不指定objname参数时,系统存储过程sp_spaceused将统计当前数据库中的资料空间信息。
updateusage 参数说明是否在统计空间使用情况前执行DBCC UPDATEUSAGE语句。默认时其值为false,即不执行DBCC UPDATEUSAGE语句。将其值设置为true时,系统将对数据库执行DBCC UPDATEUSAGE语句,这样所得到的空间使用信息将更为准确,但执行该语句要占用一定的时间,尤其是当数据库较大时,其执行时间会更长;
?        DBCC SQLPERF(LOGSPACE):检索数据库中的日志空间信息。

二、数据库表存储结构      在SQL Server中,每个数据库最多可创建20亿个表,一个表允许定义1024列,每行的最大长度为8092字节(不包括文本和图像类型的长度)。当表中定义 有varchar、nvarchar或varbinary类型列时,如果向表中插入的数据行超过8092字节时将导致Transact-SQL语句失败, 并产生错误信息。SQL Server对每个表中行的数量没有直接限制,但它受数据库存储空间的限制。每个数据库的最大空间1048516TB,所以一个表可用的最大空间为 1048516TB减去数据库类系统表和其它数据库对象所占用的空间。
     SQL Server中的资料表分为永久表和临时表两种,永久表在创建后一直存储在数据库文件中,直至用户删除为止。而临时表则在用户退出或系统修复时被自动删 除。临时表又分为局部临时表和全局临时表两种,局部临时表只能由创建它的用户使用,在该用户连接断开时,它被自动删除。全局临时表对系统当前的所有连接用 户来说都是可用的,在使用它的最后一个会话结束时它被自动删除。在创建表时,系统根据当前表名来确定是创建临时表还是永久表,临时表的表名以#开头,除此 之外为永久表。局部临时表表名开头包含一个#号,而全局临时表的表名开头包含两个#号。
1.使用Transact-SQL语句建立资料表
CREATE TABLE 语句的语法格式为:

图片 101CREATE TABLE
图片 102[
图片 103    database_name.[owner].
图片 104    | owner.
图片 105] table_name
图片 106(
图片 107    {    <column_definition>
图片 108        | column_name AS computed_column_expression
图片 109        | <table_constraint>
图片 110    } [,图片 111n]
图片 112)
图片 113[ON {filegroup | DEFAULT} ]
图片 114[TEXTIMAGE_ON {filegroup | DEFAULT} ]
图片 115

  其中,table_name为新建立的表名。对于临时表,表名字符串长度不能超过116个字符,而永久表的表名字符串长度则不能超过128个字符。此外,在同一个数据库中,每个表所有者创建的表名必须保证唯一。
  computed_column_expression 指出计算列的定义表达式,计算列是一个虚拟列,它并不是存储在表中,而是由表中的其它非计算列(常规列)导出。计算列定义表达式可以为常规列、常量、变 量、函数组成的表达式,但它不能由一个子查询构成。除了下面情况,计算列可以与常规列一样使用在SELECT列表、WHERE子句和ORDER BY子句中:
?        计算列不能用在索引的关键词列;
?        计算列不能作为PRIMARY KEY、UNIQUE、FOREIGN KEY或DEFAULT约束定义的一部分;
?        计算列不能用INSERT和UPDATE语句插入资料。
    注意:① 在建表语句中,不允许对计算列设置空值属性(NULL或NOT NULL);
        ② 在建表语句中,列与列的定义用逗号分隔,当将PRIMARY KEY设置在最后时,       如果最后一列是常规列,则它后面的逗号可以省略;否则如果是计算列,则此逗号不可以省略。
ON子句指出存储新建表的数据库文件组。当省略该子句或用DEFAULT关键词时,表被建立在数据库的默认文件组中。
TEXTIMAGE_ON 子句说明存储新建表中的text、ntext和image列资料的数据库文件组名称。当省略TEXTIMAGE_ON子句时,text、ntext和 image列资料与表存储在同一个文件组中。如果表中不包含text、ntext和image列,则可以省略TEXTIMAGE_ON子句。
<column_definition> ::= { column_name data_type }
[ NULL | NOT NULL ]
[ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ]
[ ROWGUIDCOL ]
[ <column_constraint>] [ ...n]
  column_definition 和data_type参数分别说明列名及其数据类型,其中数据类型可以为系统数据类型或用户定义数据类型。对于timestamp数据类型列,列名可以省 略,此时系统用timestamp字符串作为列名。在一个表中只能有一个timestamp类型列。
NULL和NOT NULL说明列值是否允许为NULL。在SQL Server中,NULL既不是0也不是空格,它意味着用户还没有为列输入资料或是明确地插入了NULL。如果不使用NULL或NOT NULL为列设置空值属性时,列空值属性遵循以下规则:
?        对于用户定义数据类型,SQL Server使用该数据类型的空值属性设置;
?        对于系统数据类型列,当列数据类型为timestamp时,列的空值属性为NOT NULL。

对于其它数据类型列,其空值属性则由连接选项ANSI_NULL_DFLT_ON和数据库选项‘ANSI null default’决定。
说明:①通过设置连接选项SET ANSI_NULL_DFLT_ON ON|OFF对列的默认空值属性进行切换;
      ②通过设置数据库选项sp_dboption ‘database’,‘ANSI null default’,‘true’或sp_dboption ‘database’,‘ANSI null default’,‘false’ 对列的默认空值属性进行切换。

IDENTITY关键词指定该列为IDENTITY列。当用户向表中插入新的资料时,系统自动为该行的 IDENTITY列赋值,并保证其值在表中的唯一性。每个表中只能有一个IDENTITY列,其列值不能由用户更新,不允许空值,也不许关联默认值或建立 DEFAULT约束。IDENTITY列常与PRIMARY KEY约束一起使用,从而保证表中各行具有唯一标识。
IDENTITY列的数据类型 只能为int、smallint、tinyint、numeric、decimal等数据类型。当IDENTITY列数据类型为numeric和 decimal时,不允许出现小数字。对于IDENTITY列,可用seed参数和increment参数指出IDENTITY列的基值和列值增量。在建 立新表时,必须同时指定IDENTITY列的基值和增量,或同时省去这两个参数。默认时,seed和increment的值均为1。
说明:① 使用关键词IDENTITYCOL可以引用表中的IDENTITY列,而不使用实际列名。                             因为每个表中只有一个IDENTITY列,所以这样操作不会引起二义性;
       ② 通过使用SQL Server中所提供的的系统函数IDENT_SEED(‘table_name’)和IDENT_INCR(‘table_name’)可以返回指定表中IDENTITY列的基值及其增量。
ROWGUIDCOL 关键词说明该列为全局唯一标识列,每个表中只能有一个ROWGUIDCOL列,ROWGUIDCOL列的数据类型必须为 uniqueidentifier。ROWGUIDCOL属性不能自动为列赋值,也不要求列值的唯一性。在INSERT语句中,可以使用NEWID函数为 ROWGUIDCOL列赋值。
2.使用Transact-SQL语句修改资料表
ALTER TABLE 语句的语法格式为:

图片 116ALTER TABLE table
图片 117{    [ALTER COLUMN column_name
图片 118        {    new_data_type [ (precision[, scale] ) ]
图片 119                    [ NULL | NOT NULL ]
图片 120            | {ADD | DROP} ROWGUIDCOL
图片 121        }
图片 122    ]
图片 123    | ADD
图片 124        {    [ <column_definition> ]
图片 125            |  column_name AS computed_column_expression
图片 126        }[,图片 127n]
图片 128    | [WITH CHECK | WITH NOCHECK] ADD
图片 129        { <table_constraint> }[,图片 130n]
图片 131    | DROP
图片 132        {    [CONSTRAINT] constraint_name
图片 133            | COLUMN column
图片 134        }[,图片 135n]
图片 136    | {CHECK | NOCHECK} CONSTRAINT
图片 137        {ALL | constraint_name[,图片 138n]}
图片 139    | {ENABLE | DISABLE} TRIGGER
图片 140        {ALL | trigger_name[,图片 141n]}
图片 142}
图片 143
图片 144

在建立一个表后,在使用过程中经常会发现原来创建的表可能存在结构、约束等方面的问题。在这种情况下,如果用一个新表替换原来的表,将造成表中资料 的丢失。使用ALTER TABLE语句可以在保留表中原有资料的基础上修改表结构,打开、关闭或删除已有的约束,或增加新的约束。
其中,table_name参数说明所修改的表名。
WITH CHECK 和WITH NOCHECK选项说明向表中添加新的或打开表中原有的CHECK约束和FOREIGN KEY约束时,是否对表中已有资料进行约束检查。使用WITH NOCHECK选项可以禁止对表中已有数据进行约束检查,但该选项对新添加的数据无效,新插入的资料必须接受约束检查。
ALTER COLUMN子句说明修改表中column_name参数所指定列定义,它可以改变列数据类型和空值设置,添加或删除ROWGUIDCOL属性。但下列类型不能被修改:
?        text、ntext、image、timestamp列;
?        计算列或用于计算的常规列;
?        复制列;
?        用于索引列,但如果这些列为varchar或varbinary数据类型,可以增加它们的列长度;
?        用在CHECK、FOREIGN KEY、UNIQUE或PRIMARY KEY约束中的列,但如果这些列为变长列,可以使用ALTER TABLE语句改变这些列的定义长度;
?        关联有默认值的列。
使用ALTER COLUMN子句修改列数据类型时,new_data_type参数必须符合以下条件:
?        原数据类型必须能够转换为新的数据类型;
?        修改后的数据类型不能为timestamp;
?        ANSI null default选项是打开的或被修改列允许空值;
注意:如果表中的对应列原定义为NULL并列中不存在资料时,将此列更改为NOT
      NULL时是允许的。
?        ANSI_PADDING选项是打开的;
?        对于被修改的IDENTITY列,必须具有有效的IDENTITY数据类型。
ADD子句说明向表中添加新列,新列的定义方法与CREATE TABLE语句中的相同,包括列名、数据类型、约束条件等。
注意:在ALTER TABLE语句中,对于新增加的列,必须允许空值,或关联一个默认值。
      无论此列原定义是否为NULL或此列中是否存在资料。
DROP { [CONSTRAINT] constraint | COLUMN column }子句说明从表中删除指定约束或列。一个表中的下列类型不能被删除:
?        复制列;
?        用于索引列;
?        用于CHECK、FOREIGN KEY、UNIQUE或 PRIMARY KEY约束中的列;
?        定义有默认值或关联有默认对象的列;
?        关联有规则的列。
      { CHECK | NOCHECK } CONSTRAINT { ALL | constraint }子句说明打开或关闭表中所有或constraint参数指定的FOREIGN KEY和CHECK约束。当使用NOCHECK CONSTRAINT关闭约束时,之后所插入到表中的资料不再接受该约束检查。在打开或关闭表中约束时,可以使用WITH CHECK或WITH NOCHECK子句对表中的资料进行(或不进行)检查。
3.使用Transact-SQL语句删除资料表
  DROP TABLE 语句的语法格式为:
  DROP TABLE table_name
   其中,table_name为待删除表的名称。
当 删除一个表时,表之定义和表中的所有数据、以及该表的索引、许可设置、约束、触发器等均被自动删除,与该表相关联的规则和默认对象失去与它的关联关系。但 是,使用DROP TABLE语句不能删除SQL Server系统表和被FOREIGN KEY约束所参照的用户表。

三、约  束 在数据库管理系统中,保证数据库中的资料完整性是非常重要的。所谓资料完整性,就是指存储在数据库中资料的一致性和正确性。在SQL Server中,可以通过各种约束和默认、规则、触发器等资料对象来保证资料的完整性。其中约束包括以下几种:
?        PRIMARY KEY:主键约束;
?        FOREIGN KEY:外键约束;
?        UNIQUE:     唯一约束;
?        CHECK:                 检查约束;
?        DEFAULT:    默认值约束。

在SQL Server中,根据完整性措施所作用的数据库对象和范围不同,可将它们分类为以下几种:
?        实体完整性;
?        域完整性;
?        参照完整性;
1.        实体完整性
实体完整性把表中的每行看作一个实体,它要求所有行都具有唯一标识。在SQL Server中,可以通过建立PARMARY KEY约束、UNIQUE约束,以及列的IDENTITY属性等措施来实施实体完整性。
2.        域完整性
域完整性要求表中指定列的资料具有正确的数据类型、格式和有效的资料范围。域完整性通过默认值、FOREIGN KEY、CHECK等约束,以及默认、规则等数据库对象来实现。
3.        参照完整性
参照完整性维持被参照表和参照表之间的资料一致性,它通过主键(PRIMARY KEY)约束和外键(FOREIGN KEY)约束来实现。在被参照表中,当其主键被其它表所参照时,该行不能被删除,也不允许改变。在参照表中,不允许参照不存在的主键值。

本文由太阳集团所有网址16877发布于太阳集团城网址送彩金,转载请注明出处:SQL Server 创建和修改数据表

您可能还会对下面的文章感兴趣: