CREATE 语句数据库
CREATE语句的开头都是同样的,而后是特定的细节。express
CREATE<object type><object name>安全
1、CREATE DATABASE服务器
CREATE DATABASE命令用于建立一个数据库,建立一个数据库的最基本语法以下所示:网络
CREATEDATABASE<database name>数据库设计
CREATE DATABASE的完整语法ide
CREATEDATABASE<NewDataBase>[ON [PRIMARY] ([NAME = <'logical file name'>,] FILENAME =<'file name'>[, SIZE = ][, MAXSIZE = ][, FILEGROWTH = ])] [LOG ON ([NAME = <'logical file name'>,] FILENAME =<'file name'>[, SIZE = ][, MAXSIZE = ][, FILEGROWTH = ])] [COLLATE ][FOR ATTAH [WITH ]|FOR ATTACH_REBUILD_LOG|WITH DB_CHAINING ON|OFF| TRUSTWORTHY ON|OFF] [AS SNAPSHOT OF ][;]spa
下面来讲明一下:操作系统
一、ON设计
ON用于两个地方:一是定义存储数据的文件位置,二是定义存储日志的文件位置。PRIMARY意味着随后是无上上存储数据的主文件组。也能够将数据存储在所谓的附属文件组里。
SQL Server容许将数据库存储在多个文件中,并且容许将这些文件放在一个逻辑组里面,称为文件组
二、NAME
这个选项用于指定定义的文件的名称,但只是一个逻辑名称-SQL Server在内部使用该名称引用该文件。当须要修改(扩充或缩小)数据库和/或文件的大小事,须要使用这个名称。
三、FILENAME
这个选项,顾名思义-实际操做系统文件在磁盘上的物理名称,在该文件中将存储数据或日志(取决于定义哪一个部分)。默认状况下,文件位于
\Program Files\Microsoft SQLServer10.MSSQLSERVER\MSSQL(或者SQL Server安装主目录)的\Data子目录下。若是是处理物理数据库文件,那么名称将和数据库名称同样,可是带有.mdf扩展名。若是处理日志文件,那么名称和数据库文件的名称同样,可是有后缀_Log以及扩展名.ldf。建议使用默认扩展名.mdf(数据库)和.ldf(日志文件)。附属文件的扩展名是.ndf。
四、SIZE
数据库的大小。默认状况下大小的单位是M(兆字节),可是能够经过在数字后面使用KB而不是MB来指定kilobyte(千字节),或者更大的单位GB或者甚至TB。这个值至少与模型数据库同样大,并且必须是整数(不能带小数),不然出错。若是没有为SIZE提供一个值,那么数据库的初始大小值与模型数据库同样。
五、MAXSIZE
SQL Server有一个机制容许数据库在必要的时候自动分配附加的磁盘空间(增长大小)。MAXSIZE是数据库能够增长的最大大小。默认状况下,单位是M,可是同SIZE同样,可使用KB、GB、TB来指定不一样的单位。稍微不一样的是,这个选项没有固定的默认值。若是没有提供这个值,那么认为没有最大值-实际的大小能够达到磁盘空间用完为止。
若是数据库的大小达到了MAXSIZE参数指定的值,那么将开始出错,插入数据将不能执行。若是日志达到最大值,那么在数据库中将没法执行任何日志活动。
六、FILEGROWTH
FILEGROWTH主要用于肯定数据库达到这个最大值的速度。提供一个值来讲明文件每次增长多少字节(以KB、MB、GB、TB为单位)。或者,也能够按照指定数据库文件的每次增加百分比。若是选择百分比,那么数据库大小将按照当前数据文件的大小以指定的百分比增加。所以,若是指定一个初始大小为1GB的数据库文件以20%的速度增加,那么第一次扩展后为1.2GB,第二次扩展后为1.44GB。
七、LOG ON
LOG ON选项容许指定哪些文件须要日志,以及这些文件位于什么位置。若是没有指定该选项,那么SQL Server将在一个单独文件中建立日志,日志文件默认的大小是数据库文件的25%。在大多数其余方面,日志文件与主数据库文件具备一样的文件规范参数。
提示:
日志文件最好存储在与主数据文件不一样的磁盘分区上。这样除了提供针对某个磁盘驱动器失效的额外安全措施外,还能够避免主数据文件与日志文件竞争磁盘文件的输入输出口。
八、COLLATE
该选项处理排序、字母大小写以及是否重音敏感问题。在安装SQL Server时,提供了默认的排序规则,可是能够在数据库层重写该默认值。
九、FOR ATTACH
可使用该选项将已存在的一些数据库文件附加到当前的服务器上。这里的文件必须是数据库的一部分,而且在某个时候已经使用sp_detach_db恰当地与数据库分离了。这样贬低了sp_detach_db的功能,可是带有FOR ATTACH的CREATE DATABASE命令具备能够访问32000多个文件的优势,而sp_attach_db只限于16个文件。
若是使用FOR ATTACH,那么必须完成文件位置信息中的ON PRIMARY部分的设置。CREATE DATABASE参数列表的其余部分能够省略,只要把数据库的文件路径附加到与原来数据库分离时相同的文件路径中。
十、WITH DB CHAINING ON|OFF
若是打开该选项,那么跨数据库的全部权链有效,而关闭该选项,则全部权链无效。
十一、TRUSTWORTHY
这个选项是新添加的选项,为访问在SQL Server环境之外的系统资源和文件添加额外的安全层。例如,可能运行.NET程序集访问网络上的文件,若是这样的话,那么必须检查数据库确保程序集是能够信赖的。因为安全缘由,这个选项在默认状况下是关闭的-在确实明白您将要作的事情和缘由以后,再打开这个选项。
示例:
CREATEDATABASE AccountingON( NAME ='Accounting', --数据库名称 FILENAME ='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AccountingData.mdf', --数据库文件位置 SIZE = 10, --大小 10M MAXSIZE =50, --最大大小 50M FILEGROWTH =5 --每次增长 5M)LOGON( NAME ='AccountingLog', FILENAME ='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\AccountingLog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB)
2、CREATE TABLE
建立表的具体语法:
CREATETABLE Customers
详细语法:
CREATETABLE[database_name.[owner].]table_name ( <column name><data type> [[DEFAULT ] | [IDENTITY [(seed,increment) [NOT FOR REPLICATION]]]] [ROWGUIDCOL] [COLLATE ] [NULL|NOT NULL] --是否容许为空 [] --列约束 | [column_name AS compute_column_expression] | [] --表约束 [,...n] ) [ON{|DEFAULT}] [TEXTIMAGE_ON{|DEFAULT}]
一、表名和列名
表名和列名的意思都懂,下面主要说命名标准。
一、对于名称的每一个单词,要求首字母大写,而其余字母小写。
二、当名称中有两个单词时,不要使用任何分隔符,经过将每一个单词首字母大写来区分单词。其实关于下划线,差异不大。顺本身意愿。
三、名称尽可能短,可是要限制缩写,只有你们一看就看的明白的状况下才缩写。当缩写以后不容易看懂,不要缩写。
四、当基于其余表来构建表时,须要在新的表名中包含全部父表的名称。如电影表Movies与演员表Stars的关系表:MovieStars。
二、IDENTITY
在数据库设计中,标识符就是SQL Server自动分配一个序号给插入的每一个行。SQL Server开始计数的数字称为种子值,而这个值随着每行增长或减小的数量值称为增量。默认状况下种子值为1,增量为1,不少设计要求不要改动设个默认设置,不过,也能够设定种子为3,增量为5等,这种状况下,将从3开始计数,而后每次加5。获得八、1三、1八、23等。
标识列必须是数值类型,在实际中,一般使用整型或大整型实现。
标识符最多见的用法是生成一个新值做为每行的标识符,即标识列一般用于建立表的主键,可是IDENTITY与PRIMARY KEY是不一样的概念,即不会由于有一个IDENTITY列就说明这个值是惟一的(例如能够重复设置种子值,使用前面用过的值)。IDENTITY值一般用于PRIMARY KEY列,但并非必须这样使用。
三、NOT FOR REPLICATION
NOT FOR REPLICATION参数决定了当列发布到另外一个数据库时,是为新的数据库分配一个新的标识列,仍是保留已有的值。
四、ROWGUIDCOL
这个很像标识列,即用于惟一标识表的每行。当启用ROWGUIDCOL后,SQL Server没有采用数字技术,而是采用全局惟一标识符(Globally Unique Identifier)。这样即便将两张表的数据复制到一个表也没有问题,所以GUID在空间和时间上都是惟一的。
五、COLLATE
这个选项与在CREATE DATABASE命令中的做用基本同样,主要区别是做用范围,这里是在列的层次而不是数据库的层次定义的。
六、NULL/NOT NULL
这个选项说明指定列是否接受NULL值,在第一次安装SQL Server时,默认的列值是NOT NULL,除非指定容许为空。
七、计算列
能够建立一个自己没有任何数据的列,但列值是由表中其余列动态生成的。由于若是查询时指定列值,能给应该带来方便。
具体语法以下:
<column name>AS<computed column expression>
示例:
ExtendPrice AS Price * Quantity
在上面的例子中,ExtendPrice的值是根据Price和Quantity计算得来。
注意事项:
一、不能使用子查询,并且值不能来自其余不一样的表。
二、能够在计算列上建立索引,可是必须采用特定的步骤。
八、表约束
表约束和列约束很类似,都是对能够插入表中的数据进行限制。它们之间有一点不一样的是:表约束能够基于多个列。
九、ON
在处理数据库建立时,提到过能够建立不一样的文件组,表定义中的ON子句就是用于指定但愿表位于哪一个文件组的一种方法。能够将给定的表放在一个特定的物理设备上,或者就按照大多数时候作的那样,省略ON子句。
十、TEXTIMAGE_ON
这个选项和前面讲到过的ON子句基本上相同,不一样的是将该选择将表的特定部分移动到不一样的文件组中。这个子句只有在表的定义中有text、ntext或p_w_picpath时才有效。当使用TEXTIMAGE_ON子句时,只是将BLOB信息移动到分离的文件组中--表的其余部分还在默认文件组或者ON子句选择的文件组中。
示例:
USE Accounting CREATETABLE Customers { CustomerNo intIDENTITYNOTNULL, CostomerName varchar(30) NOTNULL, Address1 varchar(30) NOTNULL, Address2 varchar(30) NOTNULL, City varchar(20) NOTNULL State char(2) NOTNULL, Zip varchar(10) NOT NULL, Contact varchar(25) NOTNULL, Phone char(15) NOTNULL, FedIDNo varchar(9) NOTNULL, DateInSystem smalldatetimeNOTNULL }
在CREATE代码前面添加USE行,这样可以确保当运行脚本时,是在所指定的数据库中建立表。
3、ALTER语句
与CREATE语句很类似,ALTER语句的开头总有同样的:
ALTER<object type><object name>
一、ALTER DATABASE
具体语法以下:
ALTERDATABASE<database name>ADDFILE ([ NAME = <'logical file name'>,] FILENAME = <'file name'> [, SIZE = ] [, MAXSIZE = < size in KB,MB,GB or TB>] [, FILEGROWTH = ])
[,...n][ TO FILEGROUP filegroup_name] [, OFFLINE]|ADDLOGFILE ([ NAME = <'logical file name'>, ] FILENAME = <'file name'> [, SIZE = ] [, MAXSIZE = < size in KB,MB,GB or TB>] [, FILEGROWTH = ]) | REMOVE FILE<logical file name>[WITH DELETE]|ADD FILEGROUP <filegroup name>| REMOVE FILEGROUP <filegroup name>| MODIFY FILE<filespec>| MODIFY NAME =<new dbname>| MODIFY FILEGROUP <filegroup name> {<filegroup property>| NAME =<new filegroup name>} |SET<optionspec>[,...n][WITH ]| COLLATE <collation name>
示例:将数据库扩充至100MB:
ALTERDATABASE Accounting MODIFY FILE ( NAME = Accounting, SIZE = 100MB )
二、ALTER TABLE
具体语法:
ALTERTABLE table_name {[ALTER COLUMN {[].<new_data_type>[(precision [,scale])] max|<xml schema collection>[COLLATE ][NULL | NOT NULL]|[{ADD | DROP} ROWGUIDCOL]| PERSISTED}] |ADD<column name><data_type>[[DEFAULT ]|[IDENTITY [(,)[NOT FOR REPLICATION]]]] [ROWGUIDCOL][COLLATE ][NULL | NOT NULL][]|[ AS ]|ADD[CONSTRAINT ] {[{PRIMARY KEY | UNIQUE} [CLUSTERED | NONCLUSTERED] {(<column_name>[,...n])} [WITH FILLFACTOR = ][ON { | DEFAULT}] ] |FOREIGNKEY[([,...n])] REFERENCES<referenced_table>[([,,,n])] [ON DELETE {CASCADE | NO ACTION}][ON UPDATE {CASCADE | NO ACTION}][NOT FOR REPLICATION]|DEFAULT<constant_expression>[FOR ]|CHECK[NOT FOR REPLICATOPM] (<search_conditions>) [,...n][,...n]|[WITH CHECK|WHTH NOCHECK]|{ENABLE | DISABLE } TRIGGER {ALL|<trigger name>[,...n]} |DROP {[CONSTRAINT]<constraint_name>|COLUMN<column_name>}[,...n]|{CHECK|NOCHECK} CONSTRAING {ALL|<constraint_name>[,...n]} |{ENABLE|DISABLE} TRIGGER {ALL|<trigger_name>[,...n]} | SWITCH [PARTITION ]TO[ schema_name. ] target_table [PARTITION] }
太多了,实际上用不了这么多。下面给一些示例。
添加一个列:
ALTERTABLE Employees ADD PreviousEmployer varchar(30) NULL
执行以上语句后,语句是添加了,可是这些列是添加在列表的末尾,在SQL Server中没办法将列添加到特定位置。若是想将一个列移动到中间,那么须要建立一个全新的表,将数据复制到新表中,删除已有的表,而后将表从新命名。
4、DROP语句
执行DROP语句与删除在DROP语句中引用的任何对象同样。这一操做快而简单,其语法对于全部主要的SQL Server对象(表、视图、存储过程及触发器)来讲是相同的。语法以下所示:
DROP<object type><object name>[,...n]
如下给出一个同时删除两个表的例子:
USE Accounting DROPTABLE Customer,Employess
删除数据库的例子:
USE master DROPDATABASE Accounting
若是返回错误,数据库正在使用,不能删除的话,要检查一下两个问题。
一、确保在Managerment Studio中的当前数据库不是要删除的数据库。
二、确保没有打开其余显示要删除的数据库为当前数据库的链接。