天天看點

限制與資料庫對象規則、預設值的探究

限制、規則、預設值這三者在資料表中規定了資料進行操作時的限制條件。他們三者有關系也有差別,用了兩天的時間研究了他們三者,總結如下。

  首先讓我們從關系角度來分析:

限制與資料庫對象規則、預設值的探究

  ● 淺談限制、規則、預設值

  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&gt;1000 and @salary&lt;4000

     go

     exec sp_bindrule ‘ru_salary’,  ’薪水.salary’

       go

  表說明如下:

限制與資料庫對象規則、預設值的探究

  3、預設值,用法同規則,它的作用類似于default限制,是說在表中插入資料時,如果沒有指定值,預設值自動指定資料值。

  接下來我們在文法上分析三者,看圖:

限制與資料庫對象規則、預設值的探究

  1、限制,建立方法大緻有三種:

  ——方法一:在建立表時用字句的方式建立限制

 create table 表名(

            列名資料類型,

            ……

           &lt;span style="color: #009900"&gt; constraint 限制名 primary key (列名),                       ——主鍵限制

            constraint 限制名 unique (列名),                            ——唯一限制

            constraint 限制名 foreign key (列名) references 表名 (列名),  ——外鍵限制

            constraint 限制名 check (檢查條件)                           ——check限制

&lt;/span&gt; );

        ——方法二:在建立表時直接定義限制

 &lt;span style="color: #009900"&gt;           列名資料類型 not null,                                        ——非空限制

            列名資料類型 not null primary key,                            ——主鍵限制

            列名資料類型 not null unique,                                 ——唯一限制

            列名資料類型 [not null] references 表名(列名),                ——外鍵限制

            列名資料類型 [not null] check (檢查條件)                         ——check限制&lt;/span&gt;

 )

       ——方法三:在建立表後,通過更改表來定義

&lt;span style="color: #009900"&gt; 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 (檢查條件);

&lt;/span&gt;

  删除限制的文法為:alter table 表名 drop constraint 限制名

  2、規則。規則的應用操作,首先要建立但隻建立是不能應用的要用sp_bindrule将規則綁定到字段或自定義的資料類型上才能起作用。

   ——建立

 &lt;span style="color: #009900"&gt;   create rule 規則名 as 條件表達式

    ——綁定

   &lt;span style="color: #009900"&gt; exec sp_bindrule ‘規則名’  , ‘表名.字段名’ | ‘資料類型’

&lt;/span&gt;    ——解除綁定

  &lt;span style="color: #009900"&gt;  sp_unbindrule  ‘表名.字段名’ | ‘資料類型’

    ——删除規則

    &lt;span style="color: #009900"&gt;drop rule {rule_name} [,...n]

  3、預設值的文法和規則是類似的,隻需将規則中的rule改成關鍵字default即可。

  三者間的關系很清楚了吧。

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/