- SQL Server 2016 數據庫教程(第4版)
- 鄭阿奇 劉啟芬 顧韻華主編
- 4148字
- 2019-12-20 19:40:44
2.3 命令方式創建數據庫
除了可以通過“SQL Server Management Studio”的圖形界面方式創建數據庫外,還可以使用T-SQL命令(稱為命令方式)來創建數據庫。與界面方式創建數據庫相比,命令方式更為常用,使用也更為靈活。
2.3.1 創建數據庫:CREATE DATABASE
命令方式創建數據庫使用CREATE DATABASE命令,創建前要確保用戶具有創建數據庫的權限。
CREATE DATABASE命令主要格式如下:
CREATE DATABASE數據庫名 [ ON [ PRIMARY ] [ <數據文件選項> ... [ , <數據文件組選項> ... ] [ LOG ON { <日志文件選項> ... } ] ] [ COLLATE排序名] …… ]
1. 文件選項
其中,<文件選項>格式為:
{ ( NAME =邏輯文件名, FILENAME = { '操作系統文件名' | '存儲路徑' } [ , SIZE =文件初始容量] [ , MAXSIZE = { 文件最大容量 | UNLIMITED } ] [ , FILEGROWTH = 文件增量[容量 | % ] ] ) }
說明
(1)邏輯文件名:數據庫使用的名字。
(2)操作系統文件名:操作系統在創建物理文件時使用的路徑和文件名。
(3)文件初始容量:對于主文件,若不指出大小,則默認為model數據庫主文件的大小。對于輔助數據文件,自動設置為3 MB。
(4)文件最大容量:指定文件的最大大小。UNLIMITED關鍵字表示文件大小不受限制,但實際上受磁盤可用空間的限制。如果不指定MAXSIZE選項,則文件將增長到磁盤空間滿。
(5)文件增量:有百分比和容量值兩種格式,前者如10%,即每次在原來空間大小的基礎上增長10%;后者如5 MB,即每次增長5 MB,而不管原來空間大小是多少。
注意
沒有說明的部分參考聯機文檔,后面不再特別說明。
2. 文件組選項
<文件組選項>格式為:
{ FILEGROUP文件組名[ DEFAULT ] <文件選項> …… }
(1)DEFAULT關鍵字:指定命名文件組為數據庫中的默認文件組。
(2)<文件選項>:用于指定屬于該文件組的文件的屬性,其格式描述和數據文件的屬性描述相同。
另外,COLLATE排序名:指定數據庫的默認排序規則。“排序名”既可以是Windows排序規則名稱,也可以是數據庫排序規則名稱(默認)。
【例2.4】創建一個名為test1的數據庫,其初始大小為5 MB,最大為50 MB,允許數據庫自動增長,增長方式是按10%比例增長。日志文件初始為2 MB,最大可增長到5 MB,按1 MB增長。數據文件和日志文件的存放位置為“'E:\Data”。假設SQL Server服務已啟動,并以系統管理員身份登錄計算機。
在“SQL Server Management Studio”窗口中單擊“新建查詢”按鈕新建一個查詢窗口,在“查詢分析器”窗口中輸入如下T-SQL語句:
CREATE DATABASE test1 ON ( NAME= "test1_data", FILENAME="E:\Data\test1.mdf", SIZE=5MB, MAXSIZE=50MB, FILEGROWTH=10% ) LOG ON ( NAME="test1_log", FILENAME="E:\Data\test1.ldf", SIZE=2MB, MAXSIZE=5MB, FILEGROWTH=1MB );
輸入完畢后,單擊SSMS面板上的“!執行”按鈕,消息窗口將顯示命令執行情況。如圖2.12所示。

圖2.12 在查詢分析器中執行創建數據庫命令
注意
在FILENAME中使用的文件擴展名,.mdf用于主數據文件,.ndf用于輔數據文件,.ldf用于日志文件。FILENAME選項中指定的數據和日志文件的目錄“E:\Data\”必須存在,否則將產生錯誤,即創建數據庫失敗。
如果“消息框”中顯示錯誤信息,需要查找原因,然后更正后執行;也可通過調試查找原因。
當命令成功執行后,在“對象資源管理器”中展開“數據庫”,可以看到新建的數據庫“test1”就顯示于其中。如果沒有發現“test1”,則選擇“數據庫”,單擊鼠標右鍵,在彈出的快捷菜單中選擇“刷新”菜單項即可。
通過“數據庫屬性”對話框,可以看到新建立test1數據庫的各項屬性完全符合預定要求。
【例2.5】創建一個名為test2的數據庫,它有兩個數據文件,其中主數據文件為20 MB,最大不限,按10%增長。1個輔數據文件為20 MB,最大不限,按10%增長;有1個日志文件,為50 MB,最大為100 MB,按10 MB增長。
在“查詢分析器”中輸入如下T-SQL語句并執行:
CREATE DATABASE test2 ON PRIMARY ( NAME = 'test2_data1', FILENAME = 'E:\Data\test2_data1.mdf', SIZE = 20 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ) , ( NAME = 'test2_data2', FILENAME = 'E:\Data\test2_data2.ndf', SIZE = 20 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ) LOG ON ( NAME = 'test2_log1', FILENAME = 'E:\Data\test2_log1.ldf', SIZE = 50 MB, MAXSIZE = 100 MB, FILEGROWTH = 10 MB );
【例2.6】創建一個具有2個文件組的數據庫test3。要求:
(1)主文件組包括文件test3_dat1,文件初始大小為20 MB,最大為60 MB,按5 MB增長。
(2)有1個文件組名為test3Group1,包括文件test3_dat2,文件初始大小為10 MB,最大為30 MB,按10%增長。
CREATE DATABASE test3 ON PRIMARY ( NAME ='test3_dat1', FILENAME = 'E:\Data\test3_dat1.mdf', SIZE = 20MB, MAXSIZE = 60MB, FILEGROWTH = 5MB ), FILEGROUP test3Group1 ( NAME ='test3_dat2', FILENAME = 'E:\Data\test3_dat2.ndf', SIZE = 10MB, MAXSIZE = 30MB, FILEGROWTH = 10% );
2.3.2 修改數據庫:ALTER DATABASE
使用ALTER DATABASE命令可對數據庫進行修改,語法格式如下:
ALTER DATABASE數據庫名 { ADD FILE <文件選項>... [TO FILEGROUP文件組名] / *在文件組中增加數據文件* / | ADD LOG FILE <文件選項>... / *增加日志文件* / | REMOVE FILE邏輯文件名 / *刪除數據文件* / | ADD FILEGROUP文件組名[……] / *增加文件組* / | REMOVE FILEGROUP文件組名 / *刪除文件組* / | MODIFY FILE <文件選項> / *更改文件屬性* / | MODIFY NAME = 新數據庫名 / *數據庫更名* / | MODIFY FILEGROUP文件組名 { <文件組可更新選項> | DEFAULT | NAME = 新文件組名 } / *更改文件組屬性* / | SET <屬性選項> ... [ WITH <終止> ] / *設置數據庫屬性* / | COLLATE排序名 / *指定數據庫排序規則* / }
1. 命令主體
ALTER DATABASE命令主體結構說明如下。
(1)ADD FILE子句:向數據庫添加數據文件,<文件屬性>給出文件的屬性,其構成參見CREATE DATABASE語法說明。關鍵字TO FILEGROUP指出了添加的數據文件所在的文件組名,若缺省,則為主文件組。
(2)ADD LOG FILE子句:向數據庫添加日志文件,<文件屬性>給出日志文件的屬性。
(3)REMOVE FILE子句:從數據庫中刪除數據文件,被刪除的數據文件由其中的參數“邏輯文件名”給出。當刪除一個數據文件時,邏輯文件與物理文件全部被刪除。
(4)ADD FILEGROUP子句:向數據庫中添加文件組,被添加的文件組名由參數“文件組名”給出。
(5)REMOVE FILEGROUP子句:刪除文件組,被刪除的文件組名由參數“文件組名”給出。
(6)MODIFY FILE子句:修改數據文件的屬性,被修改文件的邏輯名由<文件屬性>的NAME選項給出,可以修改的文件屬性包括FILENAME、SIZE、MAXSIZE和FILEGROWTH,但要注意,一次只能修改其中的一個屬性。修改文件大小時,修改后的大小不能小于當前文件的大小。
(7)MODIFY NAME子句:更改數據庫名,新的數據庫名由參數“新數據庫名”給出。
(8)MODIFY FILEGROUP子句:用于修改文件組的屬性。“文件組名”為要修改的文件組名稱。其中:
<文件組可更新選項>設置文件組讀寫權限;
DEFAULT選項表示將默認數據庫文件組改為指定文件組;
NAME選項用于將文件組名稱改為新文件組名。
(9)SET子句:用于設置數據庫的屬性,<屬性選項>中指定了要修改的屬性。例如,設為READ_ONLY時用戶可以從數據庫讀取數據,但不能修改數據庫。其他屬性請參考SQL Server聯機叢書。
2. 文件組可更新選項
<文件組可更新選項>定義為:
{ { READONLY | READWRITE } { READ_ONLY | READ_WRITE } }
(1)READONLY和READ_ONLY選項:用于將文件組設為只讀。
(2)READWRITE和READ_WRITE選項:將文件組設為讀/寫模式。
一般使用READ_ONLY和READ_WRITE,另外兩個選項在以后的版本中將不再使用。
【例2.7】假設已經創建了數據庫test1,它只有一個主數據文件,其邏輯文件名為test1_data,大小為5 MB,最大為50 MB,增長方式為按10%增長。
要求:修改數據庫test1現有數據文件test1_data的屬性,將主數據文件的最大容量改為100 MB,增長方式改為按每次5 MB增長。
在“查詢分析器”窗口中輸入如下T-SQL語句:
ALTER DATABASE test1 MODIFY FILE ( NAME ='test1_data', MAXSIZE =100 MB, / *將主數據文件的最大改為100 MB* / FILEGROWTH = 5 MB / *將主數據文件的增長方式改為按5 MB增長* / ) GO
單擊“執行”按鈕執行輸入的T_SQL語句,右鍵單擊“對象資源管理器”中的“數據庫”,選擇“刷新”菜單項,之后右鍵單擊數據庫test1的圖標,選擇“屬性”菜單項,在“文件”頁上查看修改后的數據文件。
注意
GO命令不是T-SQL語句,但它是SSMS代碼編輯器可識別的命令。SQL Server實用工具將GO命令解釋為應該向SQL Server實例發送當前批T-SQL語句的信號。當前批語句由上一個GO命令后輸入的所有語句組成,如果是第一條GO命令,則由會話或腳本開始后輸入的所有語句組成。
GO命令和T-SQL語句不能在同一行中,否則運行時會發生錯誤。
【例2.8】先為數據庫test1增加數據文件test1bak,然后刪除該數據文件。
ALTER DATABASE test1 ADD FILE ( NAME = 'test1bak', FILENAME = 'E:\Data\test1bak.ndf', SIZE = 10 MB, MAXSIZE = 50 MB, FILEGROWTH = 5% )
通過查看“數據庫屬性”窗口中的文件屬性來觀察數據庫test1是否增加數據文件test1bak。
刪除數據文件test1bak的命令如下:
ALTER DATABASE test1 REMOVE FILE test1bak GO
【例2.9】為數據庫test1添加文件組fgroup,并為此文件組添加兩個大小均為10 MB的數據文件。
在“查詢分析器”中輸入如下T-SQL語句并執行:
ALTER DATABASE test1 ADD FILEGROUP fgroup GO ALTER DATABASE test1 ADD FILE ( NAME = 'test1_data2', FILENAME = 'E:\Data\test1_data2.ndf', SIZE = 10 MB ), ( NAME = 'test1_data3', FILENAME = 'E:\Data\test1_data3.ndf', SIZE = 10 MB ) TO FILEGROUP fgroup GO
【例2.10】從數據庫中刪除文件組,將添加到test1數據庫中的文件組fgroup刪除。
注意
被刪除的文件組中的數據文件必須先刪除,且不能刪除主文件組。
在“查詢分析器”中輸入如下T-SQL語句并執行:
ALTER DATABASE test1 REMOVE FILE test1_ data2 GO ALTER DATABASE test1 REMOVE FILE test1_ data3 GO ALTER DATABASE test1 REMOVE FILEGROUP fgroup GO
【例2.11】為數據庫test1添加一個日志文件。
在“查詢分析器”中輸入如下T-SQL語句并執行:
ALTER DATABASE test1 ADD LOG FILE ( NAME = 'test1_log2', FILENAME = 'E:\Data\test1_log2.ldf', SIZE = 5 MB, MAXSIZE =10 MB, FILEGROWTH = 1 MB ) GO
【例2.12】從數據庫TEST1中刪除一個日志文件,將日志文件TEST1_LOG2刪除。
將數據庫test1的名改為just_test。進行此操作時必須保證該數據庫此時沒有被其他任何用戶使用。
在“查詢分析器”中輸入如下T-SQL語句并執行:
ALTER DATABASE TEST1 REMOVE FILE TEST1_LOG2 GO ALTER DATABASE test3 MODIFY NAME = just_test3 GO
注意
不能刪除主日志文件。
2.3.3 刪除數據庫:DROP DATABASE
刪除數據庫使用DROP DATABASE命令。
語法格式:
DROP DATABASE數據庫名......
其中,“數據庫名”是要刪除的數據庫名。例如,要刪除數據庫test2,使用命令:
DROP DATABASE test2 GO
注意
使用DROP DATABASE語句不會出現確認信息,所以要小心使用。另外,不能刪除系統數據庫,否則將導致服務器無法使用。
2.3.4 數據庫快照:AS SNAPSHOT
數據庫快照就是指數據庫在某一指定時刻的情況,數據庫快照提供了源數據庫在創建快照時刻的只讀、靜態視圖。雖然數據庫在不斷變化,但數據庫快照一旦創建就不會改變了。多個快照可以位于一個源數據庫中,并且可以作為數據庫始終駐留在同一服務器實例上。創建快照時,每個數據庫快照在事務上與源數據庫一致。在被數據庫所有者顯式刪除之前,快照始終存在。
快照可用于報表。另外,如果源數據庫出現用戶錯誤,還可將源數據庫恢復到創建快照時的狀態。丟失的數據僅限于創建快照后數據庫更新的數據。
創建數據庫快照也使用CREATE DATABASE命令。語法格式如下:
CREATE DATABASE數據庫快照名 ON( NAME = 邏輯文件名, FILENAME = '操作系統文件名' ) [, ... ] AS SNAPSHOT OF源數據庫名
說明
(1)數據庫快照名:數據庫快照的名稱,這個名稱在SQL Server實例中必須唯一且符合標識符規則。
(2)ON子句:若要創建數據庫快照,要在源數據庫中指定文件列表。若要使快照工作,則必須分別指定所有數據文件。其中,NAME是數據庫“行數據”文件對應的邏輯名,FILENAME是物理文件名(包含路徑)。日志文件不允許用于數據庫快照。
(3)AS SNAPSHOT OF子句:指定要創建的快照為“源數據庫名”指定的數據庫的快照。數據庫快照必須與源數據庫處于同一實例中。
注意
創建了數據庫快照之后,快照的源數據庫就會存在一些限制。如不能對數據庫刪除、分離或還原;源數據庫性能會受到影響;不能從源數據庫或其他快照上刪除文件;源數據庫必須處于在線狀態。
【例2.13】創建test1數據庫的快照test1_s1。
CREATE DATABASE test1_s1 ON ( NAME=test1_data, FILENAME ='E:\Data\test1_s1.mdf' ) AS SNAPSHOT OF test1 GO
命令執行成功之后,在“對象資源管理器”窗口中刷新“數據庫”菜單欄,在“數據庫”中展開“數據庫快照”,就可以看見剛剛創建的數據庫快照test1_s1了。
刪除數據庫快照的方法和刪除數據庫的方法完全相同,可以使用界面方式刪除,也可以使用命令方式刪除,例如:
DROP DATABASE test1_s1;
- SQL Server 2012數據庫技術與應用(微課版)
- 數據架構與商業智能
- Power BI商業數據分析完全自學教程
- Splunk智能運維實戰
- 數據庫原理與應用
- SQL Server深入詳解
- 深入理解InfluxDB:時序數據庫詳解與實踐
- Expert Python Programming(Third Edition)
- Mastering ROS for Robotics Programming(Second Edition)
- 實現領域驅動設計
- 算力經濟:從超級計算到云計算
- 數據分析思維:產品經理的成長筆記
- 企業級大數據項目實戰:用戶搜索行為分析系統從0到1
- 大數據隱私保護技術與治理機制研究
- Oracle 內核技術揭密