SQLServer学习笔记.doc_第1页
SQLServer学习笔记.doc_第2页
SQLServer学习笔记.doc_第3页
SQLServer学习笔记.doc_第4页
SQLServer学习笔记.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库的物理存储结构页(Page)SQL Server中存储数据的最小单位,每一个页的大小是8KB(8192字节)。每一个页的前96个字节是页首,存储一些系统信息:页码、页的类型、页中的可用空间量、拥有此页对象的对象ID。 数据页(Data Page):存储数据记录的数据。但几种大型对象(Large Object,LOB)除外。varchar(max)textnvarchar(max)ntextvarbinary(max)imagexml 索引页(Index Page):索引页用来存储索引数据。 文本图像页:存储7种大型对象数据以及3种数据记录超过8KB的可变长度数据? 全局分配映射表页与共享全局分配映射表页:存储关于扩展盘区的信息。 可用空间页:存储关于页分配与可用空间的信息。索引分配映射表页:存储表或索引所使用的扩展盘区的相关信息。 大容量更改映射表页:存储最近一次执行BACKUP LOG命令之后,Bulk操作所修改的扩展盘区的相关信息。 差异更改映射表页:存储最近一次执行BACKUP DATABASE命令之后,所修改的扩展盘区的相关信息。除了文本/图像页的数据类型之外,表的数据记录中的所有数据都存储在数据页中,数据记录的存储位置会紧跟在页首之后并且依次排列。一个页可存储多条记录,但是同一条记录不能跨页存储,因此每条数据记录的最大数据量是8086个字节。数据页页首数据记录1数据记录2数据记录3可用空间321数据记录偏移表【注】数据库的日志文件并不会包含页,日志文件仅会包含一系列的日志记录。扩展盘区(Extent)分配给表和索引的单位空间。由8个连续的页构成,大小是64KB。统一扩展盘区:由某单一对象所拥有。混合扩展盘区:最多可被8个对象共享。SQL2005会从各个混合盘区中分配页给一个新的表或索引,等到此表或索引增长到8个页时,再移到专门的统一扩展盘区,除非对某一表创建的索引有足够的数据产生8个页。数据库文件的组成文件 主要数据文件:*.MDF包含数据库的初始信息,记录数据库还拥有哪些其他文件,并且被用来存储数据。master也会记录数据库是由哪些文件组成的。每个数据库有且只有一个主要数据文件。 次要数据文件:*.NDF使用次要数据文件的原因有两点:凭借在不同的物理磁盘上创建次要数据文件并将数据存储其中,在某些状况下此举可提高效率。主要数据文件可能会超过Windows对单一文件大小的限制。事务日志文件:*.LDF包含用来恢复数据库的日志信息。每一个数据库至少必须拥有一个日志文件。SQL Server会将每个物理日志文件分成数个虚拟日志文件。虚拟日志文件的大小和数量不固定,我们无法指定。【注】SQL Server2005的文件会拥有两个文件名:逻辑文件名和物理文件名。文件组(Filegroup)基于管理与数据分配的目的,SQL Server允许将多个文件归纳为同一组,并赋予此组一个名称,即文件组。文件组只能包含数据文件,日志文件不能隶属于任何文件组。主要文件组(Primary Filegroup):包含主要数据文件和无法放进其他文件组的所有文件。包括系统表的所有页。用户定义文件组(User-Defined Filegroup):在创建一个新的数据库或更改某一现有数据库的设置时,特别要求创建的文件组便是用户定义文件组。默认文件组(Default Filegroup):除非特别指定,否则主要文件组将是默认文件组(系统默认PRIMARY)。改变默认文件组会使得在创建时未指定所属文件组的表和索引被分配给新的默认文件组中的数据文件,但是系统对象和系统表仍会留在主要文件组中。将数据添加到文件组中的各个文件时,会采取等比的填充策略。但文件全部被填满后,一次只会加大一个文件的大小,第一个文件填满后再加大第二文件。数据文件和文件组绝对不能与日志文件存储在相同的物理磁盘上。创建数据库方法一:SQL Server Management Studio方法二:SMO(SQL Management Object)方法三:Transact-SQL的CREATE DATABASE表达式 打开SQL Server Management Studio。 连接到服务器。 展开数据库引擎实例。 右击“数据库”项目或任何一个数据库名称,右键新建数据库 指定数据库名称、数据库所有者(默认为登录者)、是否启用全文索引、主要数据文件的逻辑名(建议采用默认)、初始大小及增长方式。 指定主要数据文件的物理文件路径(保存后不能修改)。 设置次要文件的相关属性。 指定次要数据文件。 选择排序规则、恢复模式、兼容级别,并指定选项卡中的其他选项(一般使用默认)。 指定文件组。删除数据库方法一:打开SQL Server Management Studio,选定要删除的数据库,右键删除。方法二:使用DROP DATABASE表达式。某一数据库删除后,只能从先前所作的备份来还原它。删除数据库之后应立即备份master。修改数据库更改数据库名称必须先确认没有任何人正在使用数据库。方法一:打开SQL Server Management Studio,选定要修改的数据库,右键重命名。方法二:ALTER DATABASE MODIFY NAME。扩充数据文件或日志文件空间方法一:打开SQL Server Management Studio,选定要修改的数据库,右键属性。增加(且只能增加)初始大小至少1MB。假如要配置新的次要数据文件或日志文件给数据库,请单击添加按钮。收缩单个数据文件或日志文件的空间不能将“整个”数据库收缩到比它当初创建时的大小还要小(不能收缩初始大小部分,只能收缩自动增长部分),也不能收缩到比系统数据库model还小。收缩日志文件的大小将会删除未被使用到的虚拟日志文件,但至少会保留一个。收缩与备份不能同时进行。方法一:打开SQL Server Management Studio,选定要修改的数据库,右键任务/收缩/文件。方法二:使用DBCC SHRINKFILE表达式。收缩数据库的空间如果需要使收缩后的数据库大小小于最初创建文件时所指定的大小,请先收缩数据文件或日志文件的空间。删除数据文件与日志文件删除数据文件或日志文件的先决条件:它们必须完全是空的。因为数据文件按比例填充,所以必须先执行收缩文件中的“通过将数据迁移到同一文件组中的其他文件来清空文件”。但日志文件不能这样处理,因此需要去截断或备份事务日志以便在其不包含任何活动或非活动中的事务信息后,将日志文件删除。【注】 添加或删除数据文件或日志文件之后,请立即将数据库备份,然后备份事务日志。 主要数据文件和日志文件是无法被删除的。操作:选定要修改的数据库,右键属性/选择页/文件/删除。更改数据库的拥有者更改数据库的配置设置方法一:属性/选择页/选项方法二:ALTER DATABASE。方法三:更改系统数据库model的相关配置选项的设定值。系统数据库的用途 master内含许多系统表,用来追踪与记录SQL Server的相关信息: SQL Server的初始化信息。 所有的登录账户。 所有的系统配置设置。 创建的数据库的相关信息。 进行分布式操作中,会记录有哪些其他的SQL Server。注执行任何会更改系统数据库master的操作后,请立即备份master。 model所有新建数据库的模板。 msdb提供SQL Server、SQL Server Agent服务、Database Mail以及Service Broker来存储数据,备份还原信息记录。 tempdb存放所有临时表、存储过程和临时数据,是一个完全开放的共享资源。 资源(mssqlsystemresource)用来存储SQL Server所有的系统对象(例如sp_开关的存储过程)。注系统数据库“资源”是一个只读数据库。 系统数据库“资源”必须和master位于同一个目录中。 系统数据库的文件名称与存放位置D:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATA(2008R2)系统数据库名文件种类逻辑文件名物理文件名默认大小增长大小方式master主要数据文件mastermaster.mdf4MB自动增长10%,满为止日志文件mastlogmaster.ldf2MB自动增长10%,满为止model主要数据文件modeldevmodel .mdf3MB自动增长1MB,满为止日志文件modellogmodellog.ldf1MB自动增长10%,满为止msdb主要数据文件msdbdataMSDBData.mdf6MB自动增长1MB,满为止日志文件msdblogMSDBLog.ldf2MB自动增长1MB,最大2TBtempdb主要数据文件tempdevtempdb.mdf8MB自动增长10%,满为止日志文件templogtemplog.ldf1MB自动增长10%,满为止资源主要数据文件不适用mssqlsystemresource.mdf不适用不适用日志文件不适用mssqlsystemresource.ldf不适用不适用【注】各版本的系统数据库的增长大小并不完全相同。 上表以2005EE为例,数据文件最大16TB,日志文件最大2TB。分离和附加数据库用途:将数据库移动到其他计算机。改变数据文件和日志文件的目录。计算机A计算机B数据文件日志文件分离附加附加到其他目录分离操作:只读数据库不勾选活动数据库请勾选方法一:数据库/任务/分离【注】SQL Server 2008中“未就绪”问题解决办法:设置“限制访问”为“单个用户”模式。方法二:sp_detach_dbdbname=数据库名,skipchecks=true|false,keepfulltextindexfile=true|false|NULL例:USE master EXEC sp_detach_db MyDb ,true, true附加操作:方法一:数据库/附加/添加/定位*.mdf文件/确定方法二:CREATE DATABASE database_nameON(NAME=logical_file_name, FILENAME=os_file_name) ,nFOR ATTACH例: CREATE DATABASE MyDbON( NAME=MyDb1,FILENAME=ND:DataMyDbdata1.mdf)/主要数据文件( NAME=MyDb2,FILENAME=ND:DataMyDbdata2.ndf)/次要数据文件( NAME=MyDblog1, FILENAME=ND:SQLLogMyDblog1.ldf)/日志文件FOR ATTACH;方法三:使用系统存储过程sp_attach_db来附加数据库(不建议)。创建可移动数据库计算机A计算机B可移动介质分离附加计算机A计算机C步骤:1. 创建一个可移动数据库。CREATE DATABASE database_nameON PRIMARY,n, ,n LOG ON ,n COLLATE collation_nameWITHDB_CHAINING ON|OFF|TRUSTWORTHY ON|OFF ; 格式说明: := ( NAME = logical_file_name , FILENAME = os_file_name , SIZE = size KB | MB | GB | TB , MAXSIZE = max_size KB | MB | GB | TB | UNLIMITED , FILEGROWTH = growth_increment KB | MB | GB | TB | % ) := FILEGROUP filegroup_name DEFAULT ,.n 例:/*文件名称:CH4_Demo003.sql文件目的:创建一个拥有一个主要数据文件(3MB)、一个日志文件(2MB)和一个次要数据文件(5MB)的可移动数据库Sales 。注意事项:请确认C:SQL2005DemoData 确实存在。*/CREATE DATABASE SalesONPRIMARY( NAME = salesys, FILENAME = NC:SQL2005DemoDatasalesys.mdf, SIZE = 3),( NAME = saledata, FILENAME = NC:SQL2005DemoDatasaledata.ndf, SIZE = 5)LOG ON( NAME = salelog, FILENAME = NC:SQL2005DemoDatasalelog.ldf, SIZE = 2);GO2. 使用系统存储过程sp_detach_db将可移动数据库从SQL Server分离,同时更新过时的最优化信息。3. 将所有的数据文件和日志文件复制到可移动介质上。4.使用CREATE DATABASE database_name FOR ATTACH将介质上的数据库附加到某一计算机上。创建和维护表表的结构列(Column)字段结构(Structure) 字段特性:字段名称、数据类型、长度、精度、小数位数、是否允许空值等行(Row)记录(Records)数据(Records)字段名SQL Server命名规则字段名最长128个字符字段名可包含中文、英文字母、数字、下划线、#、$和长度、精度与小数位数长度:对字符串与Unicode数据类型而言,长度代表字符的数目对数值类的数据类型而言,长度代表字段使用多少个字节存放数字,由类型决定对binary、varbinary、image数据类型而言,长度代表字段所能容纳的字节数精度是指数字的位数。比如12345.678,其精度是8,小数位数是3。系统数据类型下表列出30种,其中table数据类型只能用于变量与用户定义函数的类型;cursor系统数据类型仅适用于变量和存储过程中的参数,并不适用于字段,因此未列出。SQL Server 2008 新增7种数据类型:date( )time( )datetime2( )datetimeoffset( )geography是基于地球的实际形状计算的geometry是基于平面进行计算的hierarchyidSQLServer2005系统数据类型数据性质数据类型数据范围存储大小字符数据(固定长度)char(n)8000个ASCII字符n个字节字符数据(可变长度)varchar(n)实际长度2个字节大值字符数据(可变长度)varchar(max)2311个ASCII字符Unicode字符nchar(n)4000个Unicode字符2n个字节nvarchar(n)实际长度22个字节nvarchar(max)2301个Unicode字符二进制数据(固定长度)binary(n)8000个字节n个字节二进制数据(可变长度)varbinary(n)实际长度2个字节大值二进制数据(可变长度)varbinary(max)2311个字节大量文本数据(可变长度)text2311个ASCII字符16位的指针Unicode字符ntext2301个Unicode字符实际长度2个字节大量二进制数据(可变长度)image2311个字节16位的指针整数bigint26326318个字节int23123114个字节smallint21521512个字节tinyint02551个字节精确数值decimal(p,s)103811038119 5个字节1019 9个字节2028 13个字节2938 17个字节numeric(p,s)近似数值float(n)1.79E+3081.79E+308124 4个字节2553 8个字节real3.40E+383.40E+384个字节货币值money-922337203685477.5808922337203685477.58078个字节smallmoney-214748.3648214748.36474个字节日期与时间datetime1753/01/019999/12/318个字节smalldatetime1900/1/12079/6/64个字节特殊的数据bit timestamp uniqueidentifier sql_variant table xml创建表说明: SQL Server 2005数据库可拥有20亿个表。每个表拥有1024个字段。记录个数与表的大小受限于磁盘空间。每条记录最大8060个字节(大值类型字段除外)。方法一:可视化界面SQL Server Management Studio展开对应数据库,右击表对象,点选“新建表”。设置各个字段的字段名称、数据类型、长度或精度与小数位数、“允许Null值”等。字段其余的属性可以在下方的“列属性”窗格中进行更详细的设置。方法二:Transact-SQL表达式CREATE TABLECREATE TABLE database_name.schema_name.|schema_name. table_name (column_name NULL | NOT NULL ,n ) ON filegroup TEXTIMAGE_ON filegroup ; := type_schema_name. type_name ( precision ,scale | max) 指定表的名称数据库.架构名.表名默认架构是:dbo指定的架构务必存在于新表所属的数据库中。没有指定数据库时,则构架务必已存在于目前的活动数据库中。表名最长128个字符,可使用中文;临时表名最多116个字符。指定基本字段规格字段定义语句必须包含在一对小括号中,各个字段以逗号分隔。设置字段是否允许NULL值字段定义语句并未加入关键字NULL或NOT NULL时,字段是否允许Null值将由下列两项设定来决定:会话设置 SET ANSI_NULL_DFLT_OFFON|OFF SET ANSI_NULL_DFLT_ONON|OFF两者之一设为ON时,另一个自动设置成OFF。两者都设为OFF时:sys.databases元数据is_ansi_null_default_onon|off当时的设置。指定文件组ON filegroup指定大值数据类型的文件组TEXTIMAGE_ON filegroup如果创建的表中没有八种大值数据类型字段,该参数将引发错误。指定数据类型和所属架构一般不指定字段的数据类型以及其所隶属的架构。但使用用户定义数据类型时,需要使用 type_schema_name,type_name参数来指定。如果没有指定架构名,则自动按如下顺序指定:SQL Server系统数据类型的架构。目前该用户的默认架构。目前数据库的dbo架构。指定的type_name可以是下面三种数据类型:SQL Server的系统数据类型。CREATE TYPE创建的用户定义数据类型。CREATE TYPE创建的CLR用户定义类型。指定精度与小数位数全局唯一标识符与uniqueidentifier字段“全局唯一标识符(GUID)”是一个16字节(128位)的二进制数,采用uniqueidentifier数据类型存放。XXXXXXXX- XXXX- XXXX- XXXX-XXXXXXXXXXXX字节4 -2-2-2-6取自网卡上的标识号再加上一个取自CPU时钟的唯一数值。产生GUID的两种方式:调用NEWID或NEW SEQUENTIAL函数返回一个GUID(取自服务器网卡):Transact-SQL、Batch、Script。调用API函数或方法返回一个GUID(取自客户端网卡)。默认状态下,SQL Server并不自动为uniqueidentifier数据类型的字段产生新的GUID,需以NEWID( )或NEWSEQUENTIALID( )作为uniqueidentifier数据类型字段的默认值即可。方式一:方式二:CREATETABLEComputerManager(ComputerIDuniqueidentifierDEFAULTNEWID(),ComputerNamevarchar(16);又如:CREATETABLEFacilityList(ComputerIDuniqueidentifierDEFAULTNEWSEQUENTIALID(),ComputerNamevarchar(16);或:CREATETABLE计算机管理员(计算机识别码uniqueidentifierDEFAULTNEWID(),计算机名称nvarchar(16);GOINSERT计算机管理员VALUES (NEWID(),MainSite1);INSERT计算机管理员VALUES (NEWID(),MainSite2);GO有一点非常值得玩味,除非您为字段指定了PRIMARY KEY或UNIQUE约束,否则各条数据记录的uniqueidentifier字段内容允许重复!事实上一个表允许有多个uniqueidentifier字段,但是只能有一个uniqueidentifier字段是内容不可重复的ROWGUID字段。将某个uniqueidentifier字段设成ROWGUID字段的方法:方法一:方法二:/* 文件名称:CH5_Demo008.sql */USE北风贸易;GO- 检查表是否存在,如果存在的话就先删除IFOBJECT_ID(N计算机管理员,NU)ISNOTNULLDROPTABLE计算机管理员;GOCREATETABLE计算机管理员(计算机编号uniqueidentifierDEFAULTNEWID()ROWGUIDCOL/ROWGUIDCOL并不会自动将其默认值设置成newid()CONSTRAINT计算机编号UNIQUE,/加上约束使得字段内容不能重复计算机名称nvarchar(16);GO总结:uniqueidentifier字段的内容GUID由NEWID()、NEWSEQUENTIAL()函数或API函数产生。一个表只能有一个uniqueidentifier字段是内容不可重复的ROWGUID字段,需手动添加DEFAULT NEWID()ROWGUIDCOL或将RowGuid设置成“是”使其成为ROWGUID字段。但ROWGUID字段内容仍可重复,须添加PRIMARY KEY或UNIQUE约束强制。即:定义uniqueidentifier字段,将其设置成GUID字段,加约束。自动编号字段条件:字段的数据类型必须是整数(bigint int smallint tinyint)或精确数字(decimal(p,0) numeric(p,0))。自动编号字段的内容都是整数,不可以将自动编号字段的内容设置成Null或DEFAULT。设置“种子”和“递增量”。方法一:方法二:CREATE TABLE table_name(Column_nameIDENTITY(seed, increment)【注】每个表只能有一个自动编号字段。自动编号字段的内容是不允许修改的。自动编号字段不允许Null值。可以使用SET IDENTITY_INSERTON填满DELETE表达式所造成的递增量值的间距。系统函数IDENT_SEED能返回自动编号字段的种子值,IDENT_INCR则能返回递增量值。标量函数IDENTITY能取得最近一次新添加到自动编号字段的数值。/* 文件名称:CH5_Demo009.sql */USE北风贸易;GO- 创建“我的学生”表CREATETABLE我的学生(编号intIDENTITYPRIMARYKEY,姓名nvarchar(40)NOTNULL);GO- 添加条数据INSERTINTO我的学生(姓名)VALUES (Alex Chang);INSERTINTO我的学生(姓名)VALUES (Kasumi Her);INSERTINTO我的学生(姓名)VALUES (Natha Lin);INSERTINTO我的学生(姓名)VALUES (Alex Chuo);GOSELECT编号,姓名FROM我的学生;GO- 删除1 条数据造成间距DELETE我的学生WHERE姓名=Natha Lin;GO- 检查间距是否都相同SELECT编号,姓名FROM我的学生;GO- 添加1 条编号字段的值是3 的数据,- 这时将会出现错误消息:当 IDENTITY_INSERT 设置为 OFF 时,不能为表 我的学生 中的标识列插入显式值。INSERTINTO我的学生(编号,姓名)VALUES(3,Peter Yang);GO- 设置SET IDENTITY_INSERT 为ONSETIDENTITY_INSERT我的学生ON;GO- 再次添加1 条编号字段的值是3 的数据INSERTINTO我的学生(编号,姓名)VALUES(3,Peter Yang)GO- 检查添加的数据编号是否为3SELECT编号,姓名FROM我的学生;GO- 设置SET IDENTITY_INSERT 为OFF- 避免添加数据时,若没有指定编号值,会出现错误消息。SETIDENTITY_INSERT我的学生OFF;GO/* 文件名称:CH5_Demo010.sql */USE北风贸易;GOSELECTTABLE_NAMEAS表,/这是一个字段IDENT_SEED(TABLE_NAME)AS种子值,IDENT_INCR(TABLE_NAME)AS递增量值FROMINFORMATION_SCHEMA.TABLES/这是一个视图WHEREIDENT_SEED(TABLE_NAME)ISNOTNULL;/这里是一个表GO用户定义数据类型User-Defined Data Types, (UDDT)是数据库层级的,并可创建在model中。输入名称方法一:SSMS方法二:T-SQLCREATETYPE schema_name. type_nameFROMbase_type ( precision,scale) NULL |NOT NULL ;注:不能基于timestamp创建用户定义类型。除了“默认值”和“规则”之外,其余的选项设定都不可事后修改,需删除重建。SSMS中删除用户定义数据类型时,先“显示依赖关系”;T-SQL中删除使用DROP TYPE schema_name. type_name ;创建计算字段计算字段是一个虚拟的字段,是由同一表中其他的非计算字段、常数值、函数与变量组成的表达式。/* 文件名称:CH5_Demo013.sql */USE北风贸易;GO- 检查表是否存在,如果存在的话就先删除IFOBJECT_ID(NMyTable,NU)ISNOTNULLDROPTABLEMyTable;GO/* 创建表*/CREATETABLEMyTable(ProductNamevarchar(20)NOTNULL,UnitPricemoneyNOTNULL,Discountdecimal(3,2)NOTNULL,QuantityintNOTNULL,TotalASUnitPrice*Discount*Quantity);GO计算字段可以是SELECT表达式的查询对象,但不可以是子查询。计算字段也能够在WHERE子句、ORDER BY子句以及一般表达式可以使用的任何位置使用。计算字段不能是FOREIGN KEY、CHECK或NOT NULL等约束的一部分。定性的表达式定义的计算字段且其结果的数据类型是可编制索引的类型,则计算字段可做为索引的键列,也可以是PRIMARY KEY或UNIQUE约束的一部分。在INSERT或UPDATE语句中,不能更新计算字段的内容。快速查看、添加、修改与删除数据记录在实际运行的应用系统中,查看、添加、修改与删除表中的数据记录,必须通过下列两种做法来完成:使用客户端开发工具所创建的并行输入输出界面。比方说,可以使用Visual Basic 2005、Visual C#2005、Visual C+或Access设计一个窗体(Form)让用户查看、添加、修改与删除后端SQL Server表中的数据记录。直接在客户端通过SQL Pass-Through的方式执行后端SQL Server的SELECT、INSERT、UPDATE与DELETE表达式,查看、添加、修改与删除表中的数据记录。以上这两种做法虽然标准且正统,但是对于正进行开发和测试的开发人员而言显然缓不应急。因为开发人员通常会创建一个表之后,立即输入一些数据记录,以便能够进行测试操作。此时所需要的是一个快速维护数据记录的方法。SQL-Server当然深知大家的需求,提供一个简易的数据记录维护界面。您只需依下列步骤进行,即可快速查看、添加、修改与删除表中的数据记录。更改表的结构注 如果表内含数据记录,要添加字段,请务必将新加入的字段设定成允许接受Null值,或是为它指定一个默认值。 在下列状况中,字段将无法删除: 字段用于索引中。 字段用于“复制”中 字段用于CHECK、FOREIGN KEY、UNIQUE或PRIMARY KEY约束中。 字段与DEFAULT定义相关联,或是绑定到一个默认值对象。 字段绑定到一个规则对象。 字段已注册为全文本支持。字段作为表的全文值。 字段长度部分截断的情况。 将允许接受Null值的字段设定成不允许接受Null值,须保证该字段的所有内容非Null。使用SSMS使用ALTER TABLE表达式更改现有字段的特性ALTER TABLE database_name.schema_name.|schema_name. table_nameALTER COLUMNcolumn_nametype_schema_name.type_name ( precision ,scale | max ) COLLATE /排序规则 NULL | NOT NULL|ADD|DROP ROWGUIDCOL | PERSISTED/添加或删除“全局唯一标识符字段、计算字段是否是持久的”字段属性 ; 注:一次只能更改一个字段的特性。更改多个字段的特性须执行多个ALTER TABLE表达式。任何数据类型都不能使用ALTER TABLE更改成timestamp数据类型。您不能更改timestamp数据类型的字段。不能更改计算字段或用于计算字段的字段的特性。不能更改复写字段的特性。不能更改ROWGUID字段的特性。若要更改自动编号字段的特性,则更改后的数据类型务必支持自动的数据类型。不能更改用于索引的字段之特性。除非varchar类且其特性大小增大。不能更改用CREATE STATISTICS产生统计信息的字段。字段用于CHECK或UNIQUE约束。除非改变其可变长度。拥有默认值的字段,不能更改其数据类型,只能更改长度、精度或小数位数。若要更改text与ntext字段的特性,可以改用varchar(max)、nvarchar(max)或xml类型。若要更改image字段的特性,可以改用varchar(max)数据类型字段。上述注意事项的许多限制只适用于ALTER TABLE表达式,并不适用于SSMS。例如,ALTER TABLE无法更改字段的名称,若想以程序控制的方式更改字段的名称,必须使用系统存储过程sp_rename。 向表中添加字段ALTER TABLE database_name.schema_name.table_nameADD | ,n;:column_nametype_schema_name.type_name (precision,scale|max) ROWGUIDCOL COLLATE:column_name AS computed_column_definition PERSISTED NOT NULL CONSTRAINT constraint_name 删除现有字段ALTER TABLEdatabase_name.schema_name.table_name DROP COLUMN colunn_name,n ;更改表的名称方式一:SSMS更改名称前先“查看依赖关系”方式二:程序控制sp_renameobjname=object_name, /新名称包含空格时才使用引号 newname=new_name ,objtype=object_typeobject_type的可设值:COLUMN|DATABASE|INDEX|OBJECT(表,视图,存储过程,触发器,默认值,规则)|USERDATATYPE(用户定义数据类型)。所有用户创建的数据库和数据库对象(用户数据库、表、视图、字段、存储过程、触发器、默认值、规则、用户定义函数、用户定义数据类型)的名称都可以利用sp_rename来更改。例:将数据库Test重命名为TestDb:/*将数据库设成单用户模式*/ALTER DATABASE Test SET SINGLE_USER;GO/*重命名数据库*/EXEC sp_renameTest, TestDb, DATABASE;GO/*将数据库恢复成多用户模式*/ALTER DATABASE TestDb SET MULTI_USER;GO虽然系统存储过程sp_rename可以更改视图、存储过程、触发器或用户定义函数的名称,还是建议先删除这些对象,再利用新名称创建对象,如此才可以让SQL在sys.sql_modules目录视图中创建相关的定义。也可使用ALTER DATABASE表达式搭配MODIFY NAME参数更改数据库的名称。sp_rename只能更改活动数据库中的对象的名称。更改表的架构ALTER SCHEMA schema_name TRANSFER securable_nameschema_name:目标构架,不可以是SYS或INFORMATION_SCHEMAsecurable_name:安全性对象的一部分或两部分名称。比方说,要更改MyCustomer表的架构,可以使用Alex.MyCustomer或MyCustomer。ALTER SCHEMA不仅用来更改表的架构,更改视图、存储过程、默认值和规则等数据库对象的架构同样使用ALTER SCHEMA。我们不能无中生有,将不存在的架构赋给要更改的表的架构,在目前使用的数据库中创建架构:CREATE SCHEMA schema_name |schema_name AUTHORIZATION owner_nameALTER SCHEMA只能用来更改相同数据库中的架构之间的对象,因此先使用USE命令切换至作用数据库。若要更改或删除架构内的对象,请使用该对象专用的ALTER或DROP表达式。实施数据完整性一、实施数据完整性的类型实体完整性(唯一性)域完整性(特定的数据类型数据格式数值范围)索引DEFAULT定义IDENTITY属性PRIMARY KEY约束UNIQUE约束触发器规则数据类型CHECK约束DEFAULT定义FOREIGN KEY约束NOT NULL定义XML架构触发器规则引用完整性(表间的关联性)用户定义完整性(其他)FOREIGN约束CHECK约束存储过程触发器CREATE TABLE表达式中所有字段与表级的约束存储过程触发器二、数据完整性的实施形式二、实施数据完整性的方法约束默认值存储过程触发器 XML架构规则(建议采用符合ANSI SQL标准的CHECK约束替代“规则”)。约束约束处理的对象是单个字段:列约束涉及多个字段:表约束约束的种类(5种):CHECKPRIMARY KEYUNIQUEFOREIGN KEYNOT NULL一、CHECK约束特性可以同时将多个CHECK约束应用到同一个字段,这些约束将按创建的次序进行检验。当执行INSERT或UPDATE表达式时,CHECK将会进行检验。CHECK约束不能用于自动编号字段、timestamp字段、uniqueidentifier字段。CHECK约束的逻辑表达式不能包含子查询。创建CHECK约束方法一:SSMS单击“管理Check约束”设置:保存表。方法二:使用CREATE TABLE表达式列级必须紧跟在该字段的定义语句之后,且其逻辑表达式不能引用其他字段;表级的则写在所有字段的定义语句之后。表级的也可以只涉及某单一字段。若未指定约束名称,则自动指定CK_开关名称。约束名称必须是该数据库中唯一的。/* 文件名称:CH6_Demo002

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论