限制、規則、預設值這三者在資料表中規定了資料進行操作時的限制條件。他們三者有關系也有差別,用了兩天的時間研究了他們三者,總結如下。
首先讓我們從關系角度來分析:
● 淺談限制、規則、預設值
1、限制,限制顧名思義是限制條件的意思,其實它的作用也是如此,它是對所要進行增删改查操作的資料進行一次檢查,檢查這些資料是否符合我們所要限制的條件。舉個例子:我們都經曆過聯考,考試規定考生不許帶與考試無關的物品這就是一種限制。報名考試的考生可能因為某些意外沒有進入考場考試,但大部分考生還是進行了考試。那麼在考場内就産生了兩種情況空位和非空位,這就是我們限制條件的兩種情況。我們繼續分析,在考生進入考場的情況中,考生在答卷之前是必須要在試卷和答題卡上填寫自己的資訊的,這些資訊都是必須要填的因為它們唯一确定了一個考生,這裡考生必須填寫考生資訊也就是我們所說的主鍵限制(主關鍵字限制)。接下來我們用兩個表來說明下外鍵限制:
那麼如果我們在字段後面用not null規定了呢?也就是說在我們的考生資訊表中的性别字段,該列是不允許為空的于是就用not null辨別,但是如果我們不填的話呢,我們的系統就會用default預設值限制來幫助我們天上一個值。接下來我們來看check限制,該限制是要用條件表達式來限定所要填的資料的,如下:
create table 工資 (
name char(10) primary key,
department char(20) not null,
salary int not null check(salary>1000 and salary<4000)
)
建立了一個表該表中有三個字段,name、department、salary,并在salary字段設定了限制條件。該表如下圖:
<a href="http://www.51testing.com/batch.download.php?aid=34350" target="_blank"> 在表中填資料時後兩個不符合條件是不正确的。</a>
<a href="http://www.51testing.com/batch.download.php?aid=34350" target="_blank"> 在限制中還分為兩種:字段級限制和表級限制。字段級限制是隻限制其中的一列,表級限制是限制多列,它們兩個的差別并不大,我們在了解時可以将表級了解為字段級,即:被限制的多列可以看做捆綁成一列,被捆綁後的字段中的兩個記錄是不能重複的,如:</a>
2、規則,規則顧名思義是規矩制度的意思,在進行表操作時它的作用和check限制條件是類似的,但是一個表中隻有一個規則,可有多個check限制,如:
create table 薪水(
name char(10) primary key,
position char(20) not null,
salary int not null
create rule ru_salary
as @salary>1000 and @salary<4000
go
exec sp_bindrule ‘ru_salary’, ’薪水.salary’
go
表說明如下:
3、預設值,用法同規則,它的作用類似于default限制,是說在表中插入資料時,如果沒有指定值,預設值自動指定資料值。
接下來我們在文法上分析三者,看圖:
1、限制,建立方法大緻有三種:
——方法一:在建立表時用字句的方式建立限制
create table 表名(
列名資料類型,
……
<span style="color: #009900"> constraint 限制名 primary key (列名), ——主鍵限制
constraint 限制名 unique (列名), ——唯一限制
constraint 限制名 foreign key (列名) references 表名 (列名), ——外鍵限制
constraint 限制名 check (檢查條件) ——check限制
</span> );
——方法二:在建立表時直接定義限制
<span style="color: #009900"> 列名資料類型 not null, ——非空限制
列名資料類型 not null primary key, ——主鍵限制
列名資料類型 not null unique, ——唯一限制
列名資料類型 [not null] references 表名(列名), ——外鍵限制
列名資料類型 [not null] check (檢查條件) ——check限制</span>
)
——方法三:在建立表後,通過更改表來定義
<span style="color: #009900"> alter table 表名 alter column 列名 set not null;
alter table 表名 add primary key (列名1,列名2…);
alter table 表名 add unique (列名1,列名2,……);
alter table 表名 add foreign key(列名) references 表名2 (列名2);
alter table 表名 add check (檢查條件);
</span>
删除限制的文法為:alter table 表名 drop constraint 限制名
2、規則。規則的應用操作,首先要建立但隻建立是不能應用的要用sp_bindrule将規則綁定到字段或自定義的資料類型上才能起作用。
——建立
<span style="color: #009900"> create rule 規則名 as 條件表達式
——綁定
<span style="color: #009900"> exec sp_bindrule ‘規則名’ , ‘表名.字段名’ | ‘資料類型’
</span> ——解除綁定
<span style="color: #009900"> sp_unbindrule ‘表名.字段名’ | ‘資料類型’
——删除規則
<span style="color: #009900">drop rule {rule_name} [,...n]
3、預設值的文法和規則是類似的,隻需将規則中的rule改成關鍵字default即可。
三者間的關系很清楚了吧。
====================================分割線================================
最新内容請見作者的github頁:http://qaseven.github.io/