通過Sql語句來創建數據庫與架構
創建數據庫
數據庫的創建首先是要引用主數據庫的,需要在master數據庫的環境下進行創建。大致的語法如下:

1 -- 使用master數據庫
2 use master 3 -- 創建數據庫
4 create datebase [架構名.]數據庫名 5 on [primary]--主文件數據描述
6 ( 7 name = '數據庫邏輯名', --一般是數據庫的名稱
8 filename = '數據文件的名字',--全路徑
9 size = 12mb, --數據文件初始大小
10 maxsize = 1gb, -- 文件最大值
11 filegrowth =1mb --文件增長率
12 ),(....ndf) 13 log on -- 日志文件
14 ( 15 name = '日志邏輯文件名', 16 filename = '日志文件的名字', 17 size = 12mb, -- 日志文件初始大小
18 maxsize=1gb, --日志文件最大值
19 filegrowth=1mb --增長率
20 ); -- 不能夠少了這個分號
21 go --代表上面一條語句結束,在SqlCmd中用go來執行一條Sql語句
按照上面語法,創建一個數據庫對象
1 use master 2 create database TwoDataBase --創建的數據庫名稱
3 on primary --主文件組, primary 可以省略
4 ( 5 name = N'TwoDataBase', --數據庫文件的邏輯名
6 filename=N'f:\TwoDataBase.mdf', --全路徑加上后綴
7 size=10mb, 8 maxsize=100mb, 9 filegrowth=1mb 10 ), 11 ( 12 name=N'TwoDataBase2', --次要文件名,不能夠和主文件同名
13 filename=N'f:\TwoDataBase.ndf', 14 size=10mb, 15 maxsize=100mb, 16 filegrowth=10%
17 ) 18 log on --邏輯文件
19 ( 20 name=N'TwoDataBase_log', --邏輯文件名,不能和前面的文件同名,一般都是下划線后加一個 log
21 filename=N'f:\TwoDataBase.ldf', 22 size=100mb, 23 maxsize=1gb, 24 filegrowth=10mb 25 ); 26 go
27 use TwoDataBase; --將數據庫上下文切換到我們當前創建的數據庫上面來
上面代碼中 在文件名前添加一個大寫的字符 N 代表的是什么符合國際寫法什么的。在數據文件中,如果只有一個主文件就不需要寫后面的次要文件,如果有次要文件,那么兩個括號之間的逗號不能夠少。
文件的初始大小不能夠小於3M,因為主文件必須至少是 3 MB 才能容納 model 數據庫的副本。如果沒有指定文件的大小以及增長方式,默認的大小和model數據庫是一樣的。增長方式可以寫增長的單位也可以寫上百分數
創建架構
架構是屬於數據庫的,而表是屬於架構的。表是放在架構下面的。它就是表的命名空間,主要的目的還是為了安全。用戶的權限是由架構和角色來指定的,角色是用來限制用戶具有什么樣的權限,比如一般的賬戶和sa賬戶登錄數據庫得到的權限是不一樣的。架構就指定了你能夠訪問什么樣的東西,有時可以通過寫全名來訪問非當前數據庫中的表格。
語法

1 create schema 架構名 authorization 用戶名;
創建一個架構
create schema MyDbo authorization dbo;
很多時候是不需要創建架構的,使用默認的dbo就行。
刪除數據庫與架構
通過drop關鍵字來刪除表格、架構、數據庫以及約束等
刪除數據庫和架構語句如下
1 drop database TwoDataBase; ---刪除數據庫
2 drop schema MyDbo; --刪除架構
創建簡單表格
表示存儲數據的,數據時由一定的意義的,那么這個表就要反應這個意義,創建表就是在設計表的列數據類型與約束類型。簡單語法如下

1 use 數據庫; --表示這張表格存儲在哪一個數據庫下面
2 create table 架構名.表名 --架構名可以省略
3 ( 4 字段名 類型名 null | not null, --當前的列能不能夠為空
5 字段名 類型名 null | not null, 6 字段名 類型名 null | not null, 7 字段名 類型名 null | not null
8 )
利用上面的語法,創建一個簡單的表格
1 use TwoDataBase; --如果當前環境是在這個數據庫下,也可以省略這句
2 create table TwoTable --省略了架構名
3 ( 4 id int not null, 5 name nvarchar(10), -- 6 age int , 7 gender varchar(1), 8 phone char(11), 9 fid int not null
10 )
上面的代碼中創建了一個具有六個字段的簡單表格,如果數據允許為空可以不寫null,默認的就是null。
添加與刪除約束
約束說直白了就是限定一個表格能夠取什么樣的值。它是保證數據的完整性的一種機制。主要約束分為下面幾種
- 主鍵約束(primary key):默認創建聚集索引【比如拼音檢索】。一張表只能夠有一個主鍵
- 唯一約束(unique):默認創建非聚集索引 【比如部首檢索,可以通過→右鍵→索引/鍵→添加→設置右面框框里面的東西】
- 非空約束:設計表的時候,字段后面寫的null與not null
- 檢測約束(check):限定某個字段的表達式 age > 0 and age <100
- 默認約束(default):如果不給取值就使用默認值否則使用提供的值
- 外鍵約束(foreign key):限定表格中某一列的取值必須是另外一種表中某一不重復列的數據,一般是另一張表的主鍵
添加約束
給一個表格添加約束的語法

1 alter table TableName 2 add
3 constraint 約束名 約束類型與條件, 4 constraint 約束名 約束類型與條件 5 。。。
一般在添加約束的時候,約束名的取法是:約束簡稱_表格名_字段名。通過這種方式能夠輕松的知道當前的約束是添加給誰的。約束簡稱大概為一下[本人常用的]:PK、UQ、CK、DF、FK。給上面的表格添加一些約束。比如主鍵、性別只是能夠取m/f,年齡范圍以及外鍵等。
1 alter table TwoTable --修改某一張表
2 add
3 constraint PK_TwoTable_id primary key(id) , 4 constraint UQ_TwoTable_name unique(name), 5 constraint CK_TwoTable_age check(age>=0 and age<=150), 6 constraint CK_TwoTable_gender check(gender='m' or gender='f'), 7 constraint DF_TwoTable_gender default('m') for gender, 8 constraint FK_TwoTable_OneTable_fid foreign key(fid) references [dbo].[OneTable](id);
外鍵約束中,要寫上表名然后用括號將關聯的列括起來,這個例子中用到了 [架構名].[表名](列名) 的格式,當然可以不用架構名,直接使用 表名(列名) 的形式,表名可以加中括號。這里設置的外鍵是另外一張表的id列
constraint 關鍵字,表示當前操作的是約束。
刪除約束
語法: alter table drop constraint 約束名;
比如刪除上面的外鍵約束
1 alter table TwoTable 2 drop constraint FK_TwoTable_OneTable_fid;
約束的刪除可以一次刪除多個,相互之間用逗號隔開
1 alter table TwoTable 2 drop
3 constraint FK_TwoTable_OneTable_fid, 4 constraint CF_TwoTable_gender;
修改表格結構
增加一列
語法:
alter table 表名 add 列名 類型 [約束條件]
1 alter table TableName add 列名 類型 2 --增加多列的時候,用逗號隔開,不要要多余的add 3 alter table TwoTable 4 add stuOne int not null default(0) 5 ,stuTwo int
6 , stuThree int;
刪除列
1 語法:alter table TableName drop column 列名 2 --刪除多列數據的時候,列之間用逗號隔開
3 alter table TwoTable 4 drop column stuOne 5 ,column strTwo 6 ,column stuThree
在刪除列的時候,如果此列上建有約束,需要先刪除此約束,然后才能夠刪除此列數據,因為約束是依賴於數據列的
修改列
1 alter table TableName 2 alter column 列名 類型 3 --例子
4 alter table TwoTable 5 alter columnstuTwo nvarchar(10) not null
在修改列信息的時候,一次只是能夠修改一列數據,不能夠修改多列
創建表格時添加約束
有時可以再創建表格時就給列添加一個約束條件,這樣就能夠省去后面添加約束的麻煩,但是這種方式也有一個弊端。例子如下
1 use TwoDataBase; --如果當前環境是在這個數據庫下,也可以省略這句
2 create table TwoTable 3 ( 4 id int not null primary key identity(1,1) --設置為主鍵,並且是自動增長
5 , name nvarchar(10) not null unique -- 6 , age int not null check(age >= 0 and age <= 150) 7 , gender char(1) not null default 'm' check(gender = 'm' or gender = 'f') 8 , phone char(11) null
9 , fid int not null foreign key references OneTable(id) 10 )
這種方式創建的時候,系統會給我們的約束自動添加一個名字,以約束類型簡寫形式開始下划線加上表名,但是后面不是添加的列名,而是一串十六進制表示的數字。如下面形式:PK_TwoTable_85FE435A39 如果是這樣在刪除約束的時候就只是能夠通過管理工具來實現了。下面這種方式就不會有這個問題
1 create table T_Emp 2 ( 3 id int constraint pk_emp_rd primary key identity(1,1)
5 , name nvarchar(10) not null6 , sex char(1)not null constraint CK_emp_sex(sex='m' or sex='f') 7 , dept_id int constraint fk_dept_heihei foreign key references dept(dept_id) 8 )
這種方式創建表格的時候,同時添加了約束名,相比上一中方式在以后的管理上就更加的方便了