Create Database

Create Database

CREATE DATABASE 為SQl語句,用於創建資料庫。

簡介


創建一個新資料庫及存儲該資料庫的文件,或從先前創建的資料庫的文件中附加資料庫。

語法


CREATE DATABASE database_name
[ ON
[ < filespec > [ ,... n ] ]
[ ,< filegroup > [ ,... n ] ]
]
[ LOG ON { < filespec > [ ,... n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
([ NAME =logical_file_name ,]
FILENAME ='os_file_name'
[ ,SIZE =size]
[ ,MAXSIZE ={ max_size| UNLIMITED } ]
[ ,FILEGROWTH =growth_increment ] )[ ,... n]
< filegroup > ::=
FILEGROUP filegroup_name< filespec > [ ,... n]

參數


database_name
新資料庫的名稱。資料庫名稱在伺服器中必須唯一,並且符合標識符的規則。 database_name最多可以包含 128 個字元,除非沒有為日誌指定邏輯名。如果沒有指定日誌文件的邏輯名,則 Microsoft® SQL Server™ 會通過向 database_name追加後綴來生成邏輯名。該操作要求 database_name在 123 個字元之內,以便生成的日誌文件邏輯名少於 128 個字元。
ON
指定顯式定義用來存儲資料庫數據部分的磁碟文件(數據文件)。該關鍵字後跟以逗號分隔的 項列表, 項用以定義主文件組的數據文件。主文件組的文件列表后可跟以逗號分隔的 項列表(可選),<filegroup> 項用以定義用戶文件組及其文件。
n
佔位符,表示可以為新資料庫指定多個文件。
LOG ON
指定顯式定義用來存儲資料庫日誌的磁碟文件(日誌文件)。該關鍵字後跟以逗號分隔的 項列表, 項用以定義日誌文件。如果沒有指定 LOG ON,將自動創建一個日誌文件,該文件使用系統生成的名稱,大小為資料庫中所有數據文件總大小的 25%。
FOR LOAD
支持該子句是為了與早期版本的 Microsoft SQL Server 兼容。資料庫在打開 dbo use only資料庫選項的情況下創建,並且將其狀態設置為正在裝載。SQL Server 7.0 版中不需要該子句,因為 RESTORE 語句可以作為還原操作的一部分重新創建資料庫。
FOR ATTACH
指定從現有的一組操作系統文件中附加資料庫。必須有指定第一個主文件的 條目。至於其它 <filespec> 條目,只需要與第一次創建資料庫或上一次附加資料庫時路徑不同的文件的那些條目。必須為這些文件指定 條目。附加的資料庫必須使用與 SQL Server 相同的代碼頁和排序次序創建。應使用 sp_attach_db系統存儲過程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必須指定 16 個以上的 項目時,才需要使用 CREATE DATABASE FOR ATTACH。
如果將資料庫附加到的伺服器不是該資料庫從中分離的伺服器,並且啟用了分離的資料庫以進行複製,則應該運行 sp_removedbreplication從資料庫刪除複製。
collation_name
指定資料庫的默認排序規則。排序規則名稱既可以是 Windows 排序規則名稱,也可以是 SQL 排序規則名稱。如果沒有指定排序規則,則將 SQL Server 實例的默認排序規則指派為資料庫的排序規則。
有關 Windows 和 SQL 排序規則名稱的更多信息,請參見 COLLATE
PRIMARY
指定關聯的 列表定義主文件。主文件組包含所有資料庫系統表。還包含所有未指派給用戶文件組的對象。主文件組的第一個 條目成為主文件,該文件包含資料庫的邏輯起點及其系統表。一個資料庫只能有一個主文件。如果沒有指定 PRIMARY,那麼 CREATE DATABASE 語句中列出的第一個文件將成為主文件。
NAME
為由 定義的文件指定邏輯名稱。如果指定了 FOR ATTACH,則不需要指定 NAME 參數。
logical_file_name
用來在創建資料庫后執行的 Transact-SQL 語句中引用文件的名稱。 logical_file_name在資料庫中必須唯一,並且符合標識符的規則。該名稱可以是字元或 Unicode 常量,也可以是常規標識符或定界標識符。
FILENAME
定義的文件指定操作系統文件名。
'os_file_name'
操作系統創建 定義的物理文件時使用的路徑名和文件名。 os_file_name中的路徑必須指定 SQL Server 實例上的目錄。 os_file_name不能指定壓縮文件系統中的目錄。
如果文件在原始分區上創建,則 os_file_name必須只指定現有原始分區的驅動器字母。每個原始分區上只能創建一個文件。原始分區上的文件不會自動增長;因此, os_file_name指定原始分區時,不需要指定 MAXSIZE 和 FILEGROWTH 參數。
SIZE
指定 中定義的文件的大小。如果主文件的 中沒有提供 SIZE 參數,那麼 SQL Server 將使用 model資料庫中的主文件大小。如果次要文件或日誌文件的 中沒有指定 SIZE 參數,則 SQL Server 將使文件大小為 1 MB。
size
中定義的文件的初始大小。可以使用千位元組 (KB)、兆位元組 (MB)、千兆位元組 (GB) 或兆兆位元組 (TB) 後綴。默認值為 MB。指定一個整數,不要包含小數位。 size的最小值為 512 KB。如果沒有指定 size,則默認值為 1 MB。為主文件指定的大小至少應與 model資料庫的主文件大小相同。
MAXSIZE
指定 中定義的文件可以增長到的最大大小。
max_size
中定義的文件可以增長到的最大大小。可以使用千位元組 (KB)、兆位元組 (MB)、千兆位元組 (GB) 或兆兆位元組 (TB) 後綴。默認值為 MB。指定一個整數,不要包含小數位。如果沒有指定 max_size,那麼文件將增長到磁碟變滿為止
說明在磁碟即將變滿時,Microsoft Windows NT® S/B 系統日誌會警告 SQL Server 系統管理員
UNLIMITED
指定 中定義的文件將增長到磁碟變滿為止。
FILEGROWTH
指定 中定義的文件的增長增量。文件的 FILEGROWTH 設置不能超過 MAXSIZE 設置。
growth_increment
每次需要新的空間時為文件添加的空間大小。指定一個整數,不要包含小數位。0 值表示不增長。該值可以 MB、KBGBTB 或百分比 (%) 為單位指定。如果未在數量後面指定 MB、KB 或 %,則默認值為 MB。如果指定 %,則增量大小為發生增長時文件大小的指定百分比。如果沒有指定 FILEGROWTH,則默認值為 10%,最小值為 64 KB。指定的大小舍入為最接近的 64 KB 的倍數。

註釋


使用一條 CREATE DATABASE 語句即可創建資料庫以及存儲該資料庫的文件。SQL Server 分兩步實現 CREATE DATABASE 語句:SQL Server 使用 model 資料庫的複本初始化資料庫及其元數據。
然後,SQL Server 使用空頁填充資料庫的剩餘部分,除了包含記錄資料庫中空間使用情況以外的內部數據頁。因此, model資料庫中任何用戶定義對象均複製到所有新創建的資料庫中。可以向 model資料庫中添加任何對象,例如表、視圖、存儲過程、數據類型等,以將這些對象添加到所有資料庫中。
每個新資料庫都從 model 資料庫繼承資料庫選項設置(除非指定了 FOR ATTACH)。例如,在 model和任何創建的新資料庫中,資料庫選項 select into/bulkcopy都設置為 OFF。如果使用 ALTER DATABASE 更改 model資料庫的選項,則這些選項設置會在創建的新資料庫中生效。如果在 CREATE DATABASE 語句中指定了 FOR ATTACH,則新資料庫將繼承原始資料庫的資料庫選項設置。
一台伺服器上最多可以指定 32,767 個資料庫。
有三種類型的文件用來存儲資料庫:主文件包含資料庫的啟動信息。主文件還可以用來存儲數據。每個資料庫都包含一個主文件。
次要文件保存所有主要數據文件中容納不下的數據。如果主文件大到足以容納資料庫中的所有數據,就不需要有次要數據文件。而另一些資料庫可能非常大,需要多個次要數據文件,也可能使用多個獨立磁碟驅動器上的次要文件,以將數據分佈在多個磁碟上。
事務日誌文件保存用來恢復資料庫的日誌信息。每個資料庫必須至少有一個事務日誌文件(儘管可以有多個)。事務日誌文件最小為 512 KB。每個資料庫至少有兩個文件,一個主文件和一個事務日誌文件。
儘管 'os_file_name'可以是任何有效的操作系統文件名,但如果使用以下建議的擴展名,則可以更加清楚地反映文件的用途。
文件類型文件擴展名
主要數據文件.mdf
次要數據文件.ndf
事務日誌文件.ldf
說明創建用戶資料庫后,應備份 master資料庫。
SIZE、MAXSIZE 和 FILEGROWTH 參數中不能指定分數。若要在 SIZE 參數中指定以兆位元組為單位的分數,請將該數字乘以 1,024 轉換成千位元組。例如,指定 1,536 KB 而不要指定 1.5 MB(1.5 乘以 1,024 等於 1,536)。
如果僅指定 CREATE DATABASE database_name語句而不帶其它參數,那麼資料庫的大小將與 model資料庫的大小相等。
所有資料庫都至少包含一個主文件組。所有系統表都分配在主文件組中。資料庫還可以包含用戶定義的文件組。如果使用指定用戶定義文件組的 ON filegroup子句創建對象,則該對象的所有頁均從指定的文件組中分配。所有沒有使用 ON filegroup子句(或者使用 ON DEFAULT 子句)創建的用戶對象的頁將從默認文件組分配。資料庫首次創建時,主文件組就是默認文件組。可以使用 ALTER DATABASE 將用戶定義的文件組指定為默認文件組:
ALTER DATABASE database_name MODIFY FILEGROUP filegroup_name DEFAULT 每個資料庫都有一個所有者,可在該資料庫中執行某些特殊的活動。所有者是創建資料庫的用戶。可以使用 sp_changedbowner更改資料庫所有者。
若要為 SQL Server 實例顯示某個資料庫或所有資料庫的報表,請執行 sp_helpdb。若要顯示有關資料庫中所佔用空間的報表,請使用 sp_spaceused。若要顯示有關資料庫中文件組的報表,請使用 sp_helpfilegroup,使用 sp_helpfile可顯示資料庫中文件的報表。
早期版本的 SQL Server 使用 DISK INIT 語句在執行 CREATE DATABASE 語句之前為資料庫創建文件。為了與早期版本的 SQL Server 向後兼容,CREATE DATABASE 語句也可以在用 DISK INIT 創建的文件或設備上創建新資料庫。有關更多信息,請參見 SQL Server 向後兼容性詳細信息。

許可權


CREATE DATABASE 的許可權默認地授予 sysadmin和 dbcreator固定伺服器角色的成員。 sysadmin和 securityadmin固定伺服器角色的成員可以將 CREATE DATABASE 許可權授予其它登錄。 sysadmin和 dbcreator固定伺服器角色的成員可以為 dbcreator角色添加其它登錄。CREATE DATABASE 許可權必須顯式授予,而不能通過 GRANT ALL 語句授予。
CREATE DATABASE 許可權通常限於少數登錄,以便控制對運行 SQL Server 實例的計算機上磁碟的使用。

示例


A. 創建指定數據文件和事務日誌文件的資料庫下面的示例創建名為 Sales的資料庫。因為沒有使用關鍵字 PRIMARY,第一個文件 ( Sales_dat) 成為主文件。因為 Sales_dat文件的 SIZE 參數沒有指定 MB 或 KB,因此默認為 MB,以兆位元組為單位進行分配。 Sales_log文件以兆位元組為單位進行分配,因為 SIZE 參數中顯式聲明了 MB 後綴。
USE master
GO
CREATE DATABASE Sales
ON PRIMARY
(NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5)
LOG ON
(NAME = Sales_log,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)
GO
B. 指定多個數據文件和事務日誌文件創建資料庫
下面的示例使用三個 100 MB 的數據文件和兩個 100 MB 的事務日誌文件創建了名為 Archive的資料庫。主文件是列表中的第一個文件,並使用 PRIMARY 關鍵字顯式指定。事務日誌文件在 LOG ON 關鍵字后指定。注意 FILENAME 選項中所用的文件擴展名:主要數據文件使用 .mdf,次要數據文件使用 .ndf,事務日誌文件使用 .ldf。
USE master GOCREATE DATABASE Archive ONPRIMARY (NAME = Arch1,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20),(NAME = Arch2,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat2.ndf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20),(NAME = Arch3,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat3.ndf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20)LOG ON (NAME = Archlog1,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog1.ldf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20),(NAME = Archlog2,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog2.ldf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20)GO C. 創建簡單的資料庫
本例創建名為 Products的資料庫,並指定單個文件。指定的文件成為主文件,並會自動創建一個 1 MB 的事務日誌文件。因為主文件的 SIZE參數中沒有指定 MB 或 KB,所以主文件將以兆位元組為單位進行分配。因為沒有為事務日誌文件指定 ;,所以事務日誌文件沒有 MAXSIZE,可以增長到填滿所有可用的磁碟空間為止。
USE master
GO
CREATE DATABASE Products
ON
(NAME = prods_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods.mdf',
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1)
GO
D. 不指定文件創建資料庫
下面的示例創建名為 mytest 的資料庫,並創建相應的主文件和事務日誌文件。因為該語句沒有 項,所以主資料庫文件的大小為 model資料庫主文件的大小。事務日誌文件的大小為 model 資料庫事務日誌文件的大小。因為沒有指定 MAXSIZE,文件可以增長到填滿所有可用的磁碟空間為止。
CREATE DATABASE mytest
E. 不指定 SIZE 創建資料庫
下面的示例創建名為 products2 的資料庫。文件 prods2_dat將成為主文件,大小等於 model資料庫中主文件的大小。事務日誌文件會自動創建,其大小為主文件大小的 25% 或 512 KB 中的較大值。因為沒有指定 MAXSIZE,文件可以增長到填滿所有可用的磁碟空間為止。
USE master
GO
CREATE DATABASE Products2
ON
(NAME = prods2_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods2.mdf')
GO
F. 使用文件組創建資料庫
下面的示例使用三個文件組創建名為 sales 的資料庫:主文件組包含文件 Spri1_dat 和 Spri2_dat。指定這些文件的 FILEGROWTH 增量為 15%。
名為 SalesGroup1 的文件組包含文件 SGrp1Fi1 和 SGrp1Fi2。
名為 SalesGroup2 的文件組包含文件 SGrp2Fi1 和 SGrp2Fi2。
CREATE DATABASE Sales ON PRIMARY(NAME = SPri1_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri1dat.mdf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 15%),(NAME = SPri2_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri2dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 15%),FILEGROUP SalesGroup1 (NAME = SGrp1Fi1_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi1dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5),(NAME = SGrp1Fi2_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi2dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5),FILEGROUP SalesGroup2 (NAME = SGrp2Fi1_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi1dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5),(NAME = SGrp2Fi2_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi2dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5)LOG ON(NAME = 'Sales_log',FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',SIZE = 5MB,MAXSIZE = 25MB,FILEGROWTH = 5MB)GO G. 附加資料庫
示例 B 創建一個包含下列物理文件的名為 Archive 的資料庫:
c:\program files\microsoft sql server\mssql\data\archdat1.mdf
c:\program files\microsoft sql server\mssql\data\archdat2.ndf
c:\program files\microsoft sql server\mssql\data\archdat3.ndf
c:\program files\microsoft sql server\mssql\data\archlog1.ldf
c:\program files\microsoft sql server\mssql\data\archlog2.ldf
可以使用 sp_detach_db存儲過程分離該資料庫,然後使用帶有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。
sp_detach_db Archive
GO
CREATE DATABASE Archive
ON PRIMARY (FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf')
FOR ATTACH
GO
H. 使用原始分區
下面的示例使用原始分區創建名為 Employees的資料庫。執行語句時,原始分區必須存在,並且每個原始分區只能創建一個文件。
USE master
GO
CREATE DATABASE Employees
ON
(NAME = Empl_dat,
FILENAME = 'f:',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5)
LOG ON
(NAME = 'Sales_log',
FILENAME = 'g:',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)
GO
I. 使用已裝入的驅動器
下面的示例使用指向原始分區的已裝入驅動器創建名為 Employees的資料庫。此功能只在 Microsoft® Windows® 2000 Server 中才可用..執行語句時必須已經存在已裝入的驅動器和原始分區,並且每個原始分區上只能有一個文件。當在已裝入的驅動器上創建資料庫文件時,必須用尾隨反斜線結束驅動器路徑。
USE master
GO
CREATE DATABASE Employees
ON
(NAME = Empl_dat,
FILENAME = 'd:\sample data dir\',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5)
LOG ON
(NAME = 'Sales_log',
FILENAME = 'd:\sample log dir\',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)
GO