約束與資料庫物件規則、預設值的探究

來源:互聯網
上載者:User

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

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

●淺談約束、規則、預設值

    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欄位設定了約束條件。該表如:

    

   
在表中填資料時後兩個不符合條件是不正確的。

    在約束中還分為兩種:欄位級約束和表級約束。欄位級約束是只約束其中的一列,表級約束是約束多列,它們兩個的區別並不大,我們在理解時可以將表級理解為欄位級,即:被約束的多列可以看做捆綁成一列,被捆綁後的欄位中的兩個記錄是不能重複的,如:


    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 表名(            列名資料類型,            ……            CONSTRAINT 約束名 PRIMARY KEY (列名),                       ——主鍵約束            CONSTRAINT 約束名 UNIQUE (列名),                            ——唯一約束            CONSTRAINT 約束名 FOREIGN KEY (列名) REFERENCES 表名 (列名),  ——外鍵約束            CONSTRAINT 約束名 CHECK (檢查條件)                           ——Check約束);        ——方法二:在建立表時直接定義約束CREATE TABLE 表名(            列名資料類型 NOT NULL,                                        ——非空約束            列名資料類型 NOT NULL PRIMARY KEY,                            ——主鍵約束            列名資料類型 NOT NULL UNIQUE,                                 ——唯一約束            列名資料類型 [NOT NULL] REFERENCES 表名(列名),                ——外鍵約束            列名資料類型 [NOT NULL] CHECK (檢查條件)                         ——Check約束)       ——方法三:在建立表後,通過更改表來定義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 (檢查條件);

      刪除約束的文法為:ALTER TABLE 表名 DROP CONSTRAINT 約束名

    2、規則。規則的應用操作,首先要建立但只建立是不能應用的要用sp_bindrule將規則綁定到欄位或自訂的資料類型上才能起作用。

             

   ——建立    Create rule 規則名 as 條件運算式    ——綁定    Exec sp_bindrule ‘規則名’  , ‘表名.欄位名’ | ‘資料類型’    ——解除綁定    sp_unbindrule  ‘表名.欄位名’ | ‘資料類型’    ——刪除規則    DROP RULE {rule_name} [,...n]

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

     

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

                上面兩個導圖看不清怎麼辦,不用著急來這兒下載吧: http://163.fm/8S2n28H     提取碼:0lUKbp0z

                                                                                                             http://163.fm/GktKqwV    提取碼:Dc6THqqH

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.