約束、規(guī)則、默認值這三者在數(shù)據(jù)表中規(guī)定了數(shù)據(jù)進行操作時的限制條件,
約束與數(shù)據(jù)庫對象規(guī)則、默認值的探究
。他們?nèi)哂嘘P(guān)系也有區(qū)別,用了兩天的時間研究了他們?nèi)撸?a class="channel_keylink" href="http://www.ishadingyu.com/gongzuozongjie/" title="總結(jié)">總結(jié)如下。首先讓我們從關(guān)系角度來分析:
●淺談約束、規(guī)則、默認值
1、約束,約束顧名思義是限制條件的意思,其實它的作用也是如此,它是對所要進行增刪改查操作的數(shù)據(jù)進行一次檢查,檢查這些數(shù)據(jù)是否符合我們所要約束的條件。舉個例子:我們都經(jīng)歷過高考,考試規(guī)定考生不許帶與考試無關(guān)的物品這就是一種約束。報名考試的考生可能因為某些意外沒有進入考場考試,但大部分考生還是進行了考試。那么在考場內(nèi)就產(chǎn)生了兩種情況空位和非空位,這就是我們約束條件的兩種情況。我們繼續(xù)分析,在考生進入考場的情況中,考生在答卷之前是必須要在試卷和答題卡上填寫自己的信息的,這些信息都是必須要填的因為它們唯一確定了一個考生,這里考生必須填寫考生信息也就是我們所說的主鍵約束(主關(guān)鍵字約束)。接下來我們用兩個表來說明下外鍵約束:
那么如果我們在字段后面用Not Null規(guī)定了呢?也就是說在我們的考生信息表中的性別字段,該列是不允許為空的于是就用Not Null標識,但是如果我們不填的話呢,我們的系統(tǒng)就會用Default默認值約束來幫助我們天上一個值。接下來我們來看Check約束,該約束是要用條件表達式來限定所要填的數(shù)據(jù)的,如下:
Create table 工資 ( name char(10) primary key, department char(20) Not Null, salary int not null check(salary>1000 and salary<4000) )
創(chuàng)建了一個表該表中有三個字段,name、department、salary,并在salary字段設(shè)置了約束條件。該表如下圖:
在表中填數(shù)據(jù)時后兩個不符合條件是不正確的。
在約束中還分為兩種:字段級約束和表級約束。字段級約束是只約束其中的一列,表級約束是約束多列,它們兩個的區(qū)別并不大,我們在理解時可以將表級理解為字段級,即:被約束的多列可以看做捆綁成一列,被捆綁后的字段中的兩個記錄是不能重復(fù)的,如:
2、規(guī)則,規(guī)則顧名思義是規(guī)矩制度的意思,在進行表操作時它的作用和check約束條件是類似的,但是一個表中只有一個規(guī)則,可有多個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、默認值,用法同規(guī)則,它的作用類似于Default約束,是說在表中插入數(shù)據(jù)時,如果沒有指定值,默認值自動指定數(shù)據(jù)值。
接下來我們在語法上分析三者,看圖:
1、約束,創(chuàng)建方法大致有三種:
——方法一:在創(chuàng)建表時用字句的方式創(chuàng)建約束 CREATE TABLE 表名( 列名數(shù)據(jù)類型, …… <span style="color:#009900;"> CONSTRAINT 約束名 PRIMARY KEY (列名), ——主鍵約束 CONSTRAINT 約束名 UNIQUE (列名), ——唯一約束 CONSTRAINT 約束名 FOREIGN KEY (列名) REFERENCES 表名 (列名), ——外鍵約束 CONSTRAINT 約束名 CHECK (檢查條件) ——Check約束 </span> ); ——方法二:在創(chuàng)建表時直接定義約束 CREATE TABLE 表名( <span style="color:#009900;"> 列名數(shù)據(jù)類型 NOT NULL, ——非空約束 列名數(shù)據(jù)類型 NOT NULL PRIMARY KEY, ——主鍵約束 列名數(shù)據(jù)類型 NOT NULL UNIQUE, ——唯一約束 列名數(shù)據(jù)類型 [NOT NULL] REFERENCES 表名(列名), ——外鍵約束 列名數(shù)據(jù)類型 [NOT NULL] CHECK (檢查條件) ——Check約束</span> ) ——方法三:在創(chuàng)建表后,通過更改表來定義 <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、規(guī)則,
電腦資料
《約束與數(shù)據(jù)庫對象規(guī)則、默認值的探究》(http://www.ishadingyu.com)。規(guī)則的應(yīng)用操作,首先要創(chuàng)建但只創(chuàng)建是不能應(yīng)用的要用sp_bindrule將規(guī)則綁定到字段或自定義的數(shù)據(jù)類型上才能起作用。——創(chuàng)建 <span style="color:#009900;"> Create rule 規(guī)則名 as 條件表達式 </span> ——綁定 <span style="color:#009900;"> Exec sp_bindrule ‘規(guī)則名’ , ‘表名.字段名’ | ‘數(shù)據(jù)類型’ </span> ——解除綁定 <span style="color:#009900;"> sp_unbindrule ‘表名.字段名’ | ‘數(shù)據(jù)類型’ </span> ——刪除規(guī)則 <span style="color:#009900;">DROP RULE {rule_name} [,...n] </span>
3、默認值的語法和規(guī)則是類似的,只需將規(guī)則中的rule改成關(guān)鍵字default即可。
三者間的關(guān)系很清楚了吧。
上面兩個導(dǎo)圖看不清怎么辦,不用著急來這兒下載吧:
http://163.fm/8S2n28H 提取碼:0lUKbp0z
http://163.fm/GktKqwV 提取碼:Dc6THqqH