約束、規則、預設值這三者在資料表中規定了資料進行操作時的限制條件。他們三者有關係也有區別,用了兩天的時間研究了他們三者,總結如下。
首先讓我們從關係角度來分析:
●淺談約束、規則、預設值
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