SQL Server一些繁琐事

来源:互联网 发布:行之愈笃 则知之益明 编辑:程序博客网 时间:2024/05/17 21:40

【1】如果创建表时,没有指定NULL或NOT NULL,SQL Server在缺省情况是什么? 缺省的默认值是null

【2】细看下面一段Sql脚本
CREATE TABLE [dbo].[userInfo]([id] [int] IDENTITY(1,1) NOT NULL,[userName] [nvarchar](50) NULL,[sex] [nvarchar](50) NULL,[address] [nvarchar](50) NULL,[gradeID] [int] NULL) ON [PRIMARY]
其中,ON [PRIMARY]表示的什么?
创建表的语句中,最后总来一句on[primary],这是什么意思?
PRIMARY是文件组意思是这个表健在PRIMARY文件组之上
ON [PRIMARY]  就是把数据库中的东西存储在主文件组中
在CREATE TABLE的语法中有这样一句可选语法项目:[ ON { filegroup | DEFAULT } ]   用来指定存储表的文件组。(1)如果指定 filegroup,则表将存储在指定的文件组中。数据库中必须存在该文件组。
(2)如果指定 DEFAULT,或者根本未指定 ON 参数,则表存储在默认文件组中。(DEFAULT 并不是关键字。DEFAULT 是默认文件组的标识符并需对其进行定界,如 ON "DEFAULT"、ON [DEFAULT]。)ON [PRIMARY]是表示表是建立在主文件组上。PRIMARY表示主文件组。
如果没有指定默认文件组,则主文件组是默认文件组,ON [PRIMARY]也可以省略掉。************【华丽丽的分割线】【以下内容属于转载网络的,谢谢您的分享】我们知道,SQL Server的数据文件有两个(.mdf和.ldf1.主要数据文件  该文件包含数据库的启动信息,并用于存储数据。是数据库的起点,指向数据库中文件的其它部分。
每个数据库都有一个主要数据文件主要数据文件的推荐文件扩展名是 .mdf。
2.事务日志文件 该数据库的日志信息。每个数据库都必须至少有一个日志文件日志文件的推荐文件扩展名是 .ldf。
文件组     出于分配和管理目的,可以将数据库文件分成不同的文件组。
文件组是SQL Server 数据文件的一种逻辑管理单位。SQL Server中一个或多个文件的命名集合,它构成分配或用于数据库管理的单个单元。
在首次建数据库,或者以后将更多文件添加到数据库时,可以创建文件组。
文件组不能独立于数据库文件创建。文件组是在数据库中对文件进行分组的一种管理机制。有两种类型的文件组:主要文件组和用户定义文件组。(可以说,数据库由一个主文件组和任意用户定义的文件组组成。)1.主文件组 (PRIMARY)用户定义文件组 默认文件组 同为文件组的一种类型。其包含主要数据文件和任何没有明确指派给其它文件组的其它文件。系统表的所有页均分配在主文件组.2.用户定义文件组 用户定义文件组是在 CREATE DATABASE 或 ALTER DATABASE 语句中,使用 FILEGROUP 关键字或在 SQL Server 企业管理器内的"属性"对话框指定的文件组。另:默认文件组 (DEFAULT 文件组)文件组的一种类型,其包含在创建时没有指定文件组的所有表和索引的页。在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件组,则默认文件组是主文件组。 可用 ALTER DATABASE 语句更改默认文件组。通过更改默认文件组,创建时没有指定文件组的任何对象都被分配到新默认文件组中的数据文件。然而,系统对象和表仍然保留在 PRIMARY 文件组内,而不是新默认文件组。(每个数据库中都有一个文件组作为默认文件组运行。当 SQL Server 给创建时没有为其指定文件组的表或索引分配页时,将从默认文件组中进行分配。一次只能有一个文件组作为默认文件组。db_owner 固定数据库角色成员可以将默认文件组从一个文件组切换到另一个。如果没有指定默认文件组,则主文件组是默认文件组。)为什么要建立文件组建立文件组有两个目的。一是可以更好地分配和管理存储空间,通过控制在特定磁盘驱动器上放置数据和索引来提高数据库的性能。二是由于操作系统对物理文件的大小进行了限制,所以当某个磁盘上的数据文件超过单个文件允许的最大值时,可以使用文件组中存贮在其他驱动器上的数据文件继续扩充存储空间。
数据文件和文件组的使用规则数据文件或文件组不能由一个以上的数据库使用。数据文件只能是一个文件组的成员。数据文件和日志文件不能属于同一文件或文件组日志文件不能属于任何文件组。只有文件组中的所有数据文件都没有空间了,文件组的文件才会自动增长文件组的工作原理文件组对组内的所有文件都使用按比例填充策略。
当将数据写入文件组时,SQL Server 根据文件中的可用空间量将一定比例的数据写入文件组的每个文件,而不是将所有的数据先写满第一个文件,接着再写入下一个文件。例如,如果文件1有100MB的可用空间,文件2有200MB的可用空间,则从文件1中分配一个盘区,从文件2中分配两个盘区,依此类推。这样,两个文件几乎同时填满。
一旦文件组内的所有文件已满,SQL Server 就自动地采用循环方式一次扩展一个文件,以容纳更多的数据(假定数据库设置为自动增长)。例如,某个文件组由3个文件组成,它们都设置为自动增长。当文件组中的所有文件的空间用完时,只扩展第一个文件。当第一个文件已满,不能将更多的数据写入该文件组时,扩展第二个文件。当第二个文件已满,不能将更多的数据写入该文件组时,扩展第3个文件。如果第3个文件已满,不能将更多的数据写入该文件组,那么再次扩展第一个文件,以此类推。正是由于文件组的这种特性,允许跨多个磁盘、多个磁盘控制器或 RAID(廉价磁盘冗余阵列)系统创建数据库,可提高数据库性能。例如,如果计算机中有4个磁盘,那么可以创建一个由3个数据文件和一个日志文件组成的数据库,每个磁盘上放置一个文件。在对数据进行访问时,四个读/写磁头可以同时并行地访问数据,从而加速数据库操作。另外,文件和文件组允许数据布局,可以在特定的文件组中创建表。因为特定表的所有输入/输出都可以定向到特定的磁盘,所以性能得以改善。如可以将最常用的表放在一个文件组中的一个文件中,该文件组位于一个磁盘上;而将数据库中其它的不常访问的表放在另一个文件组中的其它文件中,该文件组位于第二个磁盘上。如何使用文件组的建议(1)大多数数据库在只有单个数据文件和单个事务日志文件的情况下可以很好地运行。(2)如果使用多个文件,请为附加文件创建第二个文件组,并将其设置为默认文件组。这样,主文件将仅包含系统表和对象。(3)若要获得最佳性能,请在尽可能多的可用本地物理磁盘上创建文件或文件组,并将争夺空间最激烈的对象置于不同的文件组中。(4)使用文件组以允许将对象放置在特定的物理磁盘上。(5)将在同一联接查询中使用的不同表置于不同的文件组中。由于采用并行磁盘输入/输出对联接数据进行搜索,所以性能将得以改善。(6)将最常访问的表和属于这些表的非聚集索引置于不同的文件组上。如果文件位于不同的物理磁盘上,由于采用并行输入/输出,所以性能提高。(7)不要将日志文件与其它文件和文件组置于同一物理磁盘上。
【3】SQL生成脚本中,通常会见到GO。那么这个表示什么意思呢,它的作用是什么??
(1)使用GO语句作为批处理结束的标志。当程序碰到go语句时会把之前的全部语句作为一个批处理,并把这些语句打包发送到SQL Server。
注意的是:GO本身并不是T-SQL语句的组成部分。
(2)前面提到了批处理,那么什么又是批处理呢?
批处理是一条或者多条T-SQL语句的集合。这些语句作为一个整体一起提交给SQL Server,SQL Server将一个批处理作为一个整体进行分析、编译和执行。使用批处理可以节省系统开销。如果一个批处理中有一个错误则整个批处理都不能正常运行。
(3)很多行间如果没有加入“go”,则服务器对这些行是同时执行的
注意:不是根据命令行的上下关系依次执行,而是同时执行)。
如果你想让上边的SQL语句先执行,后边的再执行,那么就必须在这两部分之间插入“GO”语句
(4)如果很多行之间,都有GO ,而且其中一行内的代码执行时出错,其它行会受到影响吗?(什么样的影响?)
       不会影响其他行,GO就等于是个独立的事务
存储在文件中的一系列T-SQL语句,即一系列按顺序提交的批处理。脚本文件的扩展名为sql。
一个脚本文件中可以一个或多个批处理。使用脚本可以重复使用模块化代码,方便多台机器共用代码。

0 0
原创粉丝点击