原創地址:http://blog.csdn.net/guguda2008/article/details/5716939
一個完整的建庫語句是類似這樣的:
IF DB_ID('TEST') IS NOT NULL DROP DATABASE TEST
GO
CREATE DATABASE TEST
ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_SUB1 DEFAULT (
NAME=TEST_DAT_SUB1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB1.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_SUB2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB2.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_SUB2 (
NAME=TEST_DAT_SUB3
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB3.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_FILESTREAM1 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM1
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM1.MDF'
)
,FILEGROUP TEST_DAT_FILESTREAM2 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM2
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM2.MDF'
)
LOG ON (
NAME=TEST_LOG1
,FILENAME='D:/SQL2008DATAS/TEST_LOG1.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
),(
NAME=TEST_LOG2
,FILENAME='D:/SQL2008DATAS/TEST_LOG2.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
)
COLLATE CHINESE_PRC_CI_AS
WITH
DB_CHAINING OFF
,TRUSTWORTHY OFF
長了一點,不過沒關系,我分開一點一點說
1.
IF DB_ID('TEST') IS NOT NULL DROP DATABASE TEST
GO
這個是判斷如果有名為TEST的數據庫就刪除,不在本文討論范圍內,知道啥意思就好。
2.
CREATE DATABASE TEST
這就是剛才說的最簡單的建庫語句
CREATE DATABASE是關鍵字,表示要建立一個數據庫,這兩句是不能改的
TEST是庫名,基本上是隨便打的,只要符合一些規范,別打亂七八糟的字符行了,比如火星文什么的。具體規范可以看這里
http://msdn.microsoft.com/zh-cn/library/ms175874.aspx
3.
ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
這里詳細說一下
MSSQL是通過文件來存放數據的,在管理這些文件的時候可以把若干個文件分到一組。一個數據庫至少要有一個文件和一個文件組,其中至少有一個主文件組,主文件組中有且只有一個主文件,如果用戶沒有指定主文件組則會通過一些默認設置來自動創建。比如上面那個最簡單的CREATE DTABASE TEST,系統會自動創建一個RPIMARY文件組,其中有一個TEST.MDF文件。
ON PRIMARY的意思是就是指定主文件組中包含的文件。上面這段語句為主文件組PRIMARY指定了兩個文件,第一個文件就是數據庫的主文件,第二個文件則是同屬PRIMARY文件組的次要數據文件。在括號中的就是它的屬性。如果要手工指定屬性,NAME和FILENAME是必須寫的,后面三個可以不寫。不寫的話就會跟MODEL數據庫的設置一樣。
NAME是文件的邏輯名稱,在數據庫管理時作為文件的標識使用,文件名在數據庫中不能重名。
FILENAME是文件的物理名稱,也就是它在操作系統中的存放路徑。MSDN中的原話是“文件必須駐留在下列一種設備中:安裝 SQL Server 的本地服務器、存儲區域網絡 [SAN] 或基於 iSCSI 的網絡。”。后面兩個我都沒用過,留待以后學會了再補充,前一個就是WINDOWS中的路徑了。注意如果文件所在的文件夾不存在會報錯,所以要提前建好文件夾。
SIZE是文件的初始大小,主文件最小2MB,次要文件最小512KB。如果SIZE后面只寫數字如2則默認為2MB。
MAXSIZE指定文件的最大大小,如果數據庫中的所有文件都達到最大大小或者磁盤沒空間了都會導致無法插入或由小到大更新。MAXSIZE中可以寫數字,和SIZE一樣,也可以寫UNLIMITED指定不限制最大大小。
FILEGROWTH指定文件增長方式,可以和上面一樣寫數字,也可以寫百分比,不過建議寫數字,因為數據庫大了以后按百分比增長會慢。
一個文件組由一段定義文字和由括號包起來的若干個文件組成,多個文件用逗號分隔,每個文件由一對括號和若干個由逗號分隔的屬性組成,語法就是這樣了,后面的語句和這個是大同小異的。
4.
,FILEGROUP TEST_DAT_SUB1 DEFAULT (
NAME=TEST_DAT_SUB1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB1.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_SUB2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB2.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
除了第一行,剩下的都和上邊一樣。只說一下第一行。
FILEGROUP是關鍵字,指定用戶文件組,后面跟着的TEST_DAT_SUB1就是名字,DEFAULT是指定此文件組為默認文件組。默認文件組的意思就是如果創建用戶數據時如果沒有明確指定,都會放到這個文件組里。
下面的語句就是為TEST_DAT_SUB1文件組分配兩個文件。不多說了。我也都是COPY一下一改名就完了。
5
,FILEGROUP TEST_DAT_SUB2 (
NAME=TEST_DAT_SUB3
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB3.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
沒有需要說明的地方,都能看懂了吧。
6
,FILEGROUP TEST_DAT_FILESTREAM1 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM1
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM1.MDF'
)
,FILEGROUP TEST_DAT_FILESTREAM2 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM2
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM2.MDF'
)
注意文件組名后的CONTAINS FILESTREAM關鍵字,這個是2008新加的數據流功能,這里不討論先。反正加上這個關鍵字就是指定文件組在文件系統中存儲 FILESTREAM 二進制大型對象 (BLOB)。這種文件組中的文件只能指定NAME和FILENAME兩個屬性,其中FILENAME中的最后一個文件夾不能在系統中存在,比如D:/ABC/123/XXX.MDF中,必須在D盤有一個ABC文件夾,但其中不可以有名為123的文件夾。
另外一個FILESTREAM 文件組里只能有一個文件,但可以指定多個FILESTREAM 文件組。
7
LOG ON (
NAME=TEST_LOG1
,FILENAME='D:/SQL2008DATAS/TEST_LOG1.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
),(
NAME=TEST_LOG2
,FILENAME='D:/SQL2008DATAS/TEST_LOG2.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
)
LOG ON就是指定數據庫日志文件,用來對數據庫的操作日志,但比較惡心的是MS不提供查看日志文件的工具,想通過日志文件了解歷史記錄要用第三方工具。如果沒有指定日志文件,會默認創建一個與數據庫同名的LDF文件,存放在系統數據庫同一目錄下。建議日志文件和數據文件分兩個硬盤存放。
8
COLLATE CHINESE_PRC_CI_AS
指定數據庫的排序規則,如果不寫就按數據庫默認的來。排序規則我也搞不大清楚,跟系統也有關,MS的說明太簡單了。學好了以后再另寫。
9
WITH
DB_CHAINING OFF
,TRUSTWORTHY OFF
控制外部與數據庫之間的雙向訪問,DB_CHAINING指定數據庫可不可以為跨數據庫所有權鏈的源或目標;TRUSTWORTHY指定模擬上下文中的數據庫模塊能不能訪問數據庫以外的資源。可以不寫,會都默認為OFF,對這東西感興趣的可以自己去翻翻資料。這個我從來沒用過,等學會了以后再補充到這篇博客里。
附加數據庫和數據庫快照的語法和這個差不多,等着另開一篇寫,如果寫太多看完后邊的就會忘了前邊的了。
以上就是建庫語句的全部組成,除了FILESTREAM以外都是2005和2008通用的。本文是寫給對數據庫不太了解的新手的,所以如果你是新手而且有解釋看不懂,請給我留言。如果你發現文中有說的不對的地方也請給我留言。