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中的當前數據庫不是要刪除的數據庫。
二、確保沒有打開其餘顯示要刪除的數據庫爲當前數據庫的鏈接。