Sql語句在SqlServer中創建數據庫、表格並添加約束


通過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 )

這種方式創建表格的時候,同時添加了約束名,相比上一中方式在以后的管理上就更加的方便了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM