資料庫設定約束條件有什麼好處,資料庫裡的約束有何意義?有什麼作用?

2021-03-12 14:56:35 字數 4710 閱讀 5500

1樓:嘟嘟嘟兜

資料庫約束是為了保證資料的完整性而實現的一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具。

一般來說有以下幾種實現方式:

1、檢查約束:

通過在定義資料庫表裡,在欄位級或者是在表級加入的檢查約束,使其滿足特定的要求。

比如以下的表定義:

crate table student(

id serial,

name varchar(10),

scrore integer check (scrore > 0));

定義分數不能小於0。

也可以在表級定義:

check (欄位1 祕欄位2之間的關係)

2、非空約束:

這個大家應該很熟悉了。直接在欄位後面加上:not null。

3、唯一約束:

定義一個唯一約束但是它並不包括null值。直接在欄位定義後加入unique即可定義一個唯一約束。

4、主鍵約束:

sql 92建議在建立一個表時定義一個主鍵:它其實就是:唯一約束+非空約束。

5、外來鍵:

所有約束裡數這個約束最有意思了:比如說有這樣一件事,你需要做一個學生查詢的網頁。那麼為了方便,你將建立三個資料表:

一個是學生情況表:

create table student(

id serial primary ke,

name varchar(10),

.......

);一個表是記錄所開的課程

create table class(

class_id varchar(5) primary key,

describe varchar(20)

.....

);一個表是記錄學生成績的表:

create table score(

id integer references student,

class_id varchar(5) references class,

score integer check (score > 0)

);這個時候你會發現以下幾件事:

如果你在成績表裡輸入不存在的學生和課程,資料系統將拒絕。如果你要刪除一個學生,但是他已經在成績表裡有記錄,資料庫將拒絕刪除這個學生的記錄。

那麼我們現在來看,前面一個對我們是有利的,因為誰都不想一個學生無緣無故的有了一個成績的記錄,但是在刪除的時候就會比較麻煩了,有時候我的確是想刪除這個學生。那麼我總不能在應用程式裡照顧得那麼周到吧。不要緊我們在定義資料表的時候只在外來鍵那一樣加入以下控制就ok了,我們來重新定義資料表 score

create table score(

id integer references student on update cascade on delete cascade, //我們希望在學生記錄改變時自動改變分數記錄,在刪除學生級聯刪除分數記錄

class_id varchar(5) references class on update cascade on delete

restrict, //我們希望在改變課程時自動改變分數記錄表裡關於課程的引用,但是不希望刪除課程時級聯刪除分數。

.....

);這樣我們就可以很好做到資料完整了。

2樓:匿名使用者

可以防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料,保障了資料庫的正確性、相容性和安全性。

資料庫裡的約束有何意義?有什麼作用?

3樓:

資料庫約束是為了保證資料的完整性而實現的一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具。

一般來說有以下幾種實現方式:

1、檢查約束:

通過在定義資料庫表裡,在欄位級或者是在表級加入的檢查約束,使其滿足特定的要求。

比如以下的表定義:

crate table student(

id serial,

name varchar(10),

scrore integer check (scrore > 0));

定義分數不能小於0。

也可以在表級定義:

check (欄位1 祕欄位2之間的關係)

2、非空約束:

這個大家應該很熟悉了。直接在欄位後面加上:not null。

3、唯一約束:

定義一個唯一約束但是它並不包括null值。直接在欄位定義後加入unique即可定義一個唯一約束。

4、主鍵約束:

sql 92建議在建立一個表時定義一個主鍵:它其實就是:唯一約束+非空約束。

5、外來鍵:

所有約束裡數這個約束最有意思了:比如說有這樣一件事,你需要做一個學生查詢的網頁。那麼為了方便,你將建立三個資料表:

一個是學生情況表:

create table student(

id serial primary ke,

name varchar(10),

.......

);一個表是記錄所開的課程

create table class(

class_id varchar(5) primary key,

describe varchar(20)

.....

);一個表是記錄學生成績的表:

create table score(

id integer references student,

class_id varchar(5) references class,

score integer check (score > 0)

);這個時候你會發現以下幾件事:

如果你在成績表裡輸入不存在的學生和課程,資料系統將拒絕。如果你要刪除一個學生,但是他已經在成績表裡有記錄,資料庫將拒絕刪除這個學生的記錄。

那麼我們現在來看,前面一個對我們是有利的,因為誰都不想一個學生無緣無故的有了一個成績的記錄,但是在刪除的時候就會比較麻煩了,有時候我的確是想刪除這個學生。那麼我總不能在應用程式裡照顧得那麼周到吧。不要緊我們在定義資料表的時候只在外來鍵那一樣加入以下控制就ok了,我們來重新定義資料表 score

create table score(

id integer references student on update cascade on delete cascade, //我們希望在學生記錄改變時自動改變分數記錄,在刪除學生級聯刪除分數記錄

class_id varchar(5) references class on update cascade on delete

restrict, //我們希望在改變課程時自動改變分數記錄表裡關於課程的引用,但是不希望刪除課程時級聯刪除分數。

.....

);這樣我們就可以很好做到資料完整了。

4樓:匿名使用者

能保證資料的完整性。比如主鍵約束實現了實體完整性,外來鍵約束實現了參照完整性。

資料庫問題 sql server 資料庫中有哪幾種約束?各有什麼作用?

5樓:劉侶含

主要四種

1實體完整性約束(每一行反應不同的實體)

通過索引,唯一約束。主鍵約束或標識屬性來體現2域完整性約束(指給定列的輸入有效性)

通過限制資料型別,檢查約束,輸入格式,外來鍵約束,預設值,非空等體現3引用完整性約束(表之間的聯絡)

通過主外建

4自定義完整性約束(根據使用者的需求)

6樓:賓士

如表:學生資訊表(學生學號,姓名,性別,系別號)系別資訊表(系別號,系別名)

1、實體完整性約束--就是常說的主鍵約束,用來區分兩條不同的記錄。

上面的學生編號建成主鍵後,通過它可以區分學生的記錄。

2、參照完整性--就是常說的外來鍵約束,用來保證資料的整合性。

上面的 學生資訊表 中的 系別號 就是一種情況,它必須在 系別資訊表 中存在在可以,系別資訊表 中的 系別號 就可以設定成 學生資訊表 的外來鍵。

3、域完整性約束--就是常說的check約束上面的學生資訊表中的 性別 欄位只能有 男或者女,這樣就可以建一個check約束,限制該欄位只能輸入 男或者女。

---以上,希望對你有所幫助。

7樓:匿名使用者

很多 我現在手裡面也沒有書

憑記憶說幾個吧

1。主鍵外來鍵

2。唯一

3。範圍。。。

8樓:匿名使用者

這個要看資料庫的書籍啊。基礎問題不能離開課本。

sql資料庫中唯一鍵約束有什麼作用??

9樓:畢愛景雀風

主鍵約束:列內容不能重複,且不能為空

外來鍵約束:內容必須是所關聯主鍵的值其中的值空值約束:不能為空

預設約束:當插入時沒有賦值,會使用預設值

唯一約束:列的內容都是唯一的,不以重複

檢查約束:列的內容必須符合要求。如check(job

in(『engineer』,』sales』,』manager』));

10樓:

就是這個列的內容都是唯一的,沒有重複值。

語句:alter table *** add constraint unq_*** unique(欄位)

11樓:匿名使用者

就是這個欄位不允許有重複的內容. 比如用在使用者名稱裡,不能有同名

建資料庫表時為欄位指定約束條件都需要注意些什麼

1.約束主要有一下幾種 not null 用於控制欄位的內容一定不能為空 null unique 控制元件欄位內容不能重複,一個表允許有多個 unique 約束。primary key 也是用於控制元件欄位內容不能重複,但它在一個表只允許出現一個。foreign key foreign key 約束...

mysql資料庫中設定id為自動增加向資料庫中插入

在建立表的時候就將自增寫好 比如 id int 11 not null auto increment,就是讓id這個屬 性自增。你需要在建立資料庫的語句最後寫這麼一句 auto increment 1。表明自增數字從1開始。之後插入資料的sql語句就正常寫就行了 insert into user v...

資料庫學了有什麼用

人長腦殼有什麼用呢?用來儲存記憶啊。資料庫也是同樣的道理。你要是把資料庫學好了。隨便進個網路公司。當個資料庫分析師。維護師之類的。你這輩子就不用愁了。資料庫作用大了。海量儲存 方便查詢 學資料庫主要為了以後開發專案用!因為大多數專案都需要資料庫支援,除非小工具之類的,沒必要!所以學資料庫對以後的工作...