T-SQL语法(2)

2019-06-30 10:48

MAXSIZE = 50MB, FILEGROWTH = 2MB )

(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 语句的语法格式为: CREATE TABLE

[

database_name.[owner]. | owner. ] table_name (

{

| column_name AS computed_column_expression | } [,...n] )

[ON {filegroup | DEFAULT} ]

[TEXTIMAGE_ON {filegroup | DEFAULT} ]

其中,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_name data_type } [ NULL | NOT NULL ]

[ IDENTITY [(seed, increment ) [NOT FOR REPLICATION] ] ] [ ROWGUIDCOL ]

[ ] [ ...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 语句的语法格式为:

ALTER TABLE table

{ [ALTER COLUMN column_name

{ new_data_type [ (precision[, scale] ) ] [ NULL | NOT NULL ] | {ADD | DROP} ROWGUIDCOL } ] | ADD

{ [ ]

| column_name AS computed_column_expression }[,...n]

| [WITH CHECK | WITH NOCHECK] ADD { }[,...n] | DROP

{ [CONSTRAINT] constraint_name | COLUMN column }[,...n]

| {CHECK | NOCHECK} CONSTRAINT {ALL | constraint_name[,...n]} | {ENABLE | DISABLE} TRIGGER {ALL | trigger_name[,...n]} }

在建立一个表后,在使用过程中经常会发现原来创建的表可能存在结构、约束等方面的问题。在这种情况下,如果用一个新表替换原来的表,将造成表中资料的丢失。使用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)约束来实现。在被参照表中,当其主键被其它表所参照时,该行不能被删除,也不允许改变。在参照表中,不允许参照不存在的主键值。


T-SQL语法(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:名校诊断学试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: