原創(chuàng)地址:http://blog.csdn.net/guguda2008/article/details/5716939
一個(gè)完整的建庫語句是類似這樣的:
IF DB_ID('TEST') IS NOT NULL DROP DATABASE TESTGOCREATE DATABASE TESTON 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_ASWITHDB_CHAINING OFF,TRUSTWORTHY OFF長(zhǎng)了一點(diǎn),不過沒關(guān)系,我分開一點(diǎn)一點(diǎn)說
1.
IF DB_ID('TEST') IS NOT NULL DROP DATABASE TESTGO
這個(gè)是判斷如果有名為TEST的數(shù)據(jù)庫就刪除,不在本文討論范圍內(nèi),知道啥意思就好。
2.
CREATE DATABASE TEST
這就是剛才說的最簡(jiǎn)單的建庫語句
CREATE DATABASE是關(guān)鍵字,表示要建立一個(gè)數(shù)據(jù)庫,這兩句是不能改的
TEST是庫名,基本上是隨便打的,只要符合一些規(guī)范,別打亂七八糟的字符行了,比如火星文什么的。具體規(guī)范可以看這里
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)
這里詳細(xì)說一下
MSSQL是通過文件來存放數(shù)據(jù)的,在管理這些文件的時(shí)候可以把若干個(gè)文件分到一組。一個(gè)數(shù)據(jù)庫至少要有一個(gè)文件和一個(gè)文件組,其中至少有一個(gè)主文件組,主文件組中有且只有一個(gè)主文件,如果用戶沒有指定主文件組則會(huì)通過一些默認(rèn)設(shè)置來自動(dòng)創(chuàng)建。比如上面那個(gè)最簡(jiǎn)單的CREATE DTABASE TEST,系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)RPIMARY文件組,其中有一個(gè)TEST.MDF文件。
ON PRIMARY的意思是就是指定主文件組中包含的文件。上面這段語句為主文件組PRIMARY指定了兩個(gè)文件,第一個(gè)文件就是數(shù)據(jù)庫的主文件,第二個(gè)文件則是同屬PRIMARY文件組的次要數(shù)據(jù)文件。在括號(hào)中的就是它的屬性。如果要手工指定屬性,NAME和FILENAME是必須寫的,后面三個(gè)可以不寫。不寫的話就會(huì)跟MODEL數(shù)據(jù)庫的設(shè)置一樣。
NAME是文件的邏輯名稱,在數(shù)據(jù)庫管理時(shí)作為文件的標(biāo)識(shí)使用,文件名在數(shù)據(jù)庫中不能重名。
FILENAME是文件的物理名稱,也就是它在操作系統(tǒng)中的存放路徑。MSDN中的原話是“文件必須駐留在下列一種設(shè)備中:安裝 SQL Server 的本地服務(wù)器、存儲(chǔ)區(qū)域網(wǎng)絡(luò) [SAN] 或基于 iSCSI 的網(wǎng)絡(luò)。”。后面兩個(gè)我都沒用過,留待以后學(xué)會(huì)了再補(bǔ)充,前一個(gè)就是WINDOWS中的路徑了。注意如果文件所在的文件夾不存在會(huì)報(bào)錯(cuò),所以要提前建好文件夾。
SIZE是文件的初始大小,主文件最小2MB,次要文件最小512KB。如果SIZE后面只寫數(shù)字如2則默認(rèn)為2MB。
MAXSIZE指定文件的最大大小,如果數(shù)據(jù)庫中的所有文件都達(dá)到最大大小或者磁盤沒空間了都會(huì)導(dǎo)致無法插入或由小到大更新。MAXSIZE中可以寫數(shù)字,和SIZE一樣,也可以寫UNLIMITED指定不限制最大大小。
FILEGROWTH指定文件增長(zhǎng)方式,可以和上面一樣寫數(shù)字,也可以寫百分比,不過建議寫數(shù)字,因?yàn)閿?shù)據(jù)庫大了以后按百分比增長(zhǎng)會(huì)慢。
一個(gè)文件組由一段定義文字和由括號(hào)包起來的若干個(gè)文件組成,多個(gè)文件用逗號(hào)分隔,每個(gè)文件由一對(duì)括號(hào)和若干個(gè)由逗號(hào)分隔的屬性組成,語法就是這樣了,后面的語句和這個(gè)是大同小異的。
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是關(guān)鍵字,指定用戶文件組,后面跟著的TEST_DAT_SUB1就是名字,DEFAULT是指定此文件組為默認(rèn)文件組。默認(rèn)文件組的意思就是如果創(chuàng)建用戶數(shù)據(jù)時(shí)如果沒有明確指定,都會(huì)放到這個(gè)文件組里。
下面的語句就是為TEST_DAT_SUB1文件組分配兩個(gè)文件。不多說了。我也都是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關(guān)鍵字,這個(gè)是2008新加的數(shù)據(jù)流功能,這里不討論先。反正加上這個(gè)關(guān)鍵字就是指定文件組在文件系統(tǒng)中存儲(chǔ) FILESTREAM 二進(jìn)制大型對(duì)象 (BLOB)。這種文件組中的文件只能指定NAME和FILENAME兩個(gè)屬性,其中FILENAME中的最后一個(gè)文件夾不能在系統(tǒng)中存在,比如D:/ABC/123/XXX.MDF中,必須在D盤有一個(gè)ABC文件夾,但其中不可以有名為123的文件夾。
另外一個(gè)FILESTREAM 文件組里只能有一個(gè)文件,但可以指定多個(gè)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就是指定數(shù)據(jù)庫日志文件,用來對(duì)數(shù)據(jù)庫的操作日志,但比較惡心的是MS不提供查看日志文件的工具,想通過日志文件了解歷史記錄要用第三方工具。如果沒有指定日志文件,會(huì)默認(rèn)創(chuàng)建一個(gè)與數(shù)據(jù)庫同名的LDF文件,存放在系統(tǒng)數(shù)據(jù)庫同一目錄下。建議日志文件和數(shù)據(jù)文件分兩個(gè)硬盤存放。
8
COLLATE CHINESE_PRC_CI_AS
指定數(shù)據(jù)庫的排序規(guī)則,如果不寫就按數(shù)據(jù)庫默認(rèn)的來。排序規(guī)則我也搞不大清楚,跟系統(tǒng)也有關(guān),MS的說明太簡(jiǎn)單了。學(xué)好了以后再另寫。
9
WITHDB_CHAINING OFF,TRUSTWORTHY OFF
控制外部與數(shù)據(jù)庫之間的雙向訪問,DB_CHAINING指定數(shù)據(jù)庫可不可以為跨數(shù)據(jù)庫所有權(quán)鏈的源或目標(biāo);TRUSTWORTHY指定模擬上下文中的數(shù)據(jù)庫模塊能不能訪問數(shù)據(jù)庫以外的資源。可以不寫,會(huì)都默認(rèn)為OFF,對(duì)這東西感興趣的可以自己去翻翻資料。這個(gè)我從來沒用過,等學(xué)會(huì)了以后再補(bǔ)充到這篇博客里。
附加數(shù)據(jù)庫和數(shù)據(jù)庫快照的語法和這個(gè)差不多,等著另開一篇寫,如果寫太多看完后邊的就會(huì)忘了前邊的了。
以上就是建庫語句的全部組成,除了FILESTREAM以外都是2005和2008通用的。本文是寫給對(duì)數(shù)據(jù)庫不太了解的新手的,所以如果你是新手而且有解釋看不懂,請(qǐng)給我留言。如果你發(fā)現(xiàn)文中有說的不對(duì)的地方也請(qǐng)給我留言。
新聞熱點(diǎn)
疑難解答
圖片精選