資料庫中什麼是資料完整性,SQL中,什麼是資料完整性?資料完整性分為幾種?

時間 2021-10-14 22:23:54

1樓:匿名使用者

3.1 sql 中的完整性約束

sql把各種完整性約束作為資料庫模式定義的一部分。既有效防止了對資料庫的意外破壞,提高了完整性檢測的效率,又可以減輕程式設計人員的負擔。

sql對三種不同完整性約束的設定及檢測,採取了不同的方式加以實現。下面分別介紹。

3.1.1 實體完整性和主碼

實體完整性規定,主碼的任何屬性都不能為空,因為,概念模型中實體和聯絡都是可區分的,而且它們以碼為唯一性標識。如果,主碼的屬性值可以為空,則意味著在概念模型中存在著不以碼為唯一性標識的實體。這顯然是前後矛盾的。

那麼怎樣保證實體完整性呢?sql中實體完整性是通過主碼來實現的。一旦某個屬性或屬性組被定義為主碼,該主碼的每個屬性就不能為空值,並且在關係中不能出現主碼值完全相同的兩個元組。

主碼的定義是在create table 語句中使用 primary key關鍵字來實現的。方法有兩種:

a) 在屬性定義後加上關鍵字 primary key;

b) 在屬性表定義後加上額外的定義主碼的子句:primary key(《主碼屬性名錶》)

說明:�0�5 如果主碼僅由一個屬性組成,上述兩種方法都可定義,若由兩個或以上的屬性組成,則只能用上述第二種方法定義了。

�0�5 對於候選碼的說明方法,可以用unique說明該屬性的值不能重複出現。unique的使用與primary key相似。

�0�5 一個表中只能有一個主碼定義,但可以有多個unique說明。

�0�5 sql中,並沒有強制為每個關係指定主碼,但為每個關係指定主碼通常會更好一些。(因為主碼的指定可以確保關係的實體完整性)

3.1.2 參照完整性約束與外部碼

參照完整性是對關係間引用資料的一種限制。即:若屬性組a是基本關係r1的外碼,它與基本關係r2的主碼k相對應,則r1中每個元組在a上的值必須:

要麼取空值,要麼等於r2中某元組的主碼值。

一、外部碼約束的說明:

sql中就是利用外部碼的說明來實現參照完整性約束,限制表中某些屬性的取值的。外部碼的說明也有兩種方法:

1、在該屬性的說明後直接加上關鍵字」references 《表名》(《屬性名》)」,其中表名稱為參照關係名,屬性名稱為參照關係的主碼。

2、在create table 語句的屬性清單後,加上外部碼說明子句,格式為:

foreign key 《屬性名錶1> references 《表名》(《屬性名錶2>)

上式中的屬性名錶1和屬性名錶2中屬性可以多於一個,但必須前後對應。

二、參照完整性約束的實現策略

前面講了,外部碼的取值只有兩種情況:要麼取空,要麼取參照關係中的主碼值。可是當使用者操作違反了這個規則時,如何保持此約束呢?

sql提供了三種可選方案:

1、restrict(限制策略):

當使用者對錶進行違反了上述完整性約束、條件的插入、刪除或修改操作時,將會被系統拒絕。

2、cascade(級聯策略):

當對參照關係進行刪除和修改時,sql所提供的一種方案。在這種策略下,當刪除或修改參照關係中某元組的主碼值時,被參照關係中,那些外部碼具有該值的元組也將被刪除或修改,以保證參照完整性。

3、set null(置空策略):

置空策略也是針對參照關係的刪除或修改操作的。在這種策略下,當刪除參照關係中的某一元組或修改某一元組的主碼值時,被參照關係中外碼值等於該主碼值的元組在該外碼上的值將被置空

說明:當使用者不指定參照完整性的實現策略時,一般被預設為restrict(限制策略)。實現策略的說明通常被加在外部碼的說明後面,格式為:on delete set null on update cascade。

3.1.3 使用者自定義完整性約束

對於使用者自定義完整性約束,sql提供了非空約束、對屬性的check約束、對元組的check約束、觸發器等來實現使用者的各種完整性要求。

1、非空約束:

在crete table 中的屬性定義後面加上not null關鍵字即定義了該屬性不能取空值。

2、基於屬性的check約束

使用check(檢查)子句可保證屬性值滿足某些前提條件。其一般格式為:

check(《條件》)

它既可跟在屬性定義的後面,也可在定義語句中另增一子句加以說明。

如:check(age>=18 and age<=65);

check(*** in (「男」,」女」));

check(dno in(select dno from department));

從上例中可以看出,check子句的條件中還可以帶子查詢。

3、基於元組的check約束

基於元組的check約束往往要涉及到表中的多個域。所以它是元組約束。在對整個元組完成插入或對某一元組的修改完成之後,系統將自動檢查是否符合check條件表示式。

若不符合條件,系統將拒絕該插入或修改操作。

基於元組check約束的說明方法是在create table語句中的屬性表、主碼、外部碼的說明之後加上check子句。

3.1.4 約束的更新

約束與資料庫中的表和檢視一樣,可以進行增、刪、改的更新操作。為了改和刪約束,需要在定義約束時對其進行命名,在各種約束的說明前加上關鍵字constraint 和該約束的名稱即可。

例如:在employee表的create table語句中:

eno char(4) constraint pk_employee primary key,

dno char(4)constraint fk_employee foreign key references department(dno);

當對各種約束進行命名後,就可以用alter table語句來更新與屬性或表有關的各種約束。如:

alter table employee drop constraint fk_employee;

aler table salary add constraint rightsalary check(insure+fund

上述的增加約束,實際上也是通過alter table語句定義約束的一種形式。

sql不能直接修改約束,修改某一個約束實際上是用alter table 語句先刪除該約束,然後再增加一個與該約束同名的新約束。

2樓:匿名使用者

儲存在資料庫中的所有資料值均正確的狀態。如果資料庫中儲存有不正確的資料值,則該資料庫稱為已喪失資料完整性。

資料完整性(data integrity)是指資料的精確性(accuracy) 和可靠性(reliability)。它是應防止資料庫中存在不符合語義規定的資料和防止因錯誤資訊的輸入輸出造成無效操作或錯誤資訊而提出的。資料完整性分為四類:

實體完整性(entity integrity)、域完整

性(domain integrity)、參照完整性(referential integrity)、使用者定義的完整性(user-definedintegrity)。

資料庫採用多種方法來保證資料完整性,包括外來鍵、束約、規則和觸發器。系統很好地處理了這四者的關係,並針對不同的具體情況用不同的方法進行,相互交叉使用,相補缺點。

sql中,什麼是資料完整性?資料完整性分為幾種?

3樓:匿名使用者

sql 中的完整性約束

sql把各種完整性約束作為資料庫模式定義的一部分。既有效防止了對資料庫的意外破壞,提高了完整性檢測的效率,又可以減輕程式設計人員的負擔。

sql對三種不同完整性約束的設定及檢測,採取了不同的方式加以實現。下面分別介紹。

3.1.1 實體完整性和主碼

實體完整性規定,主碼的任何屬性都不能為空,因為,概念模型中實體和聯絡都是可區分的,而且它們以碼為唯一性標識。如果,主碼的屬性值可以為空,則意味著在概念模型中存在著不以碼為唯一性標識的實體。這顯然是前後矛盾的。

那麼怎樣保證實體完整性呢?sql中實體完整性是通過主碼來實現的。一旦某個屬性或屬性組被定義為主碼,該主碼的每個屬性就不能為空值,並且在關係中不能出現主碼值完全相同的兩個元組。

主碼的定義是在create table 語句中使用 primary key關鍵字來實現的。方法有兩種:

a) 在屬性定義後加上關鍵字 primary key;

b) 在屬性表定義後加上額外的定義主碼的子句:primary key(《主碼屬性名錶》)

說明:�0�5 如果主碼僅由一個屬性組成,上述兩種方法都可定義,若由兩個或以上的屬性組成,則只能用上述第二種方法定義了。

�0�5 對於候選碼的說明方法,可以用unique說明該屬性的值不能重複出現。unique的使用與primary key相似。

�0�5 一個表中只能有一個主碼定義,但可以有多個unique說明。

�0�5 sql中,並沒有強制為每個關係指定主碼,但為每個關係指定主碼通常會更好一些。(因為主碼的指定可以確保關係的實體完整性)

3.1.2 參照完整性約束與外部碼

參照完整性是對關係間引用資料的一種限制。即:若屬性組a是基本關係r1的外碼,它與基本關係r2的主碼k相對應,則r1中每個元組在a上的值必須:

要麼取空值,要麼等於r2中某元組的主碼值。

一、外部碼約束的說明:

sql中就是利用外部碼的說明來實現參照完整性約束,限制表中某些屬性的取值的。外部碼的說明也有兩種方法:

1、在該屬性的說明後直接加上關鍵字」references 《表名》(《屬性名》)」,其中表名稱為參照關係名,屬性名稱為參照關係的主碼。

2、在create table 語句的屬性清單後,加上外部碼說明子句,格式為:

foreign key 《屬性名錶1> references 《表名》(《屬性名錶2>)

上式中的屬性名錶1和屬性名錶2中屬性可以多於一個,但必須前後對應。

二、參照完整性約束的實現策略

前面講了,外部碼的取值只有兩種情況:要麼取空,要麼取參照關係中的主碼值。可是當使用者操作違反了這個規則時,如何保持此約束呢?

sql提供了三種可選方案:

1、restrict(限制策略):

當使用者對錶進行違反了上述完整性約束、條件的插入、刪除或修改操作時,將會被系統拒絕。

2、cascade(級聯策略):

當對參照關係進行刪除和修改時,sql所提供的一種方案。在這種策略下,當刪除或修改參照關係中某元組的主碼值時,被參照關係中,那些外部碼具有該值的元組也將被刪除或修改,以保證參照完整性。

3、set null(置空策略):

置空策略也是針對參照關係的刪除或修改操作的。在這種策略下,當刪除參照關係中的某一元組或修改某一元組的主碼值時,被參照關係中外碼值等於該主碼值的元組在該外碼上的值將被置空

說明:當使用者不指定參照完整性的實現策略時,一般被預設為restrict(限制策略)。實現策略的說明通常被加在外部碼的說明後面,格式為:

on delete set null on update cascade。

3.1.3 使用者自定義完整性約束

對於使用者自定義完整性約束,sql提供了非空約束、對屬性的check約束、對元組的check約束、觸發器等來實現使用者的各種完整性要求。

1、非空約束:

在crete table 中的屬性定義後面加上not null關鍵字即定義了該屬性不能取空值。

2、基於屬性的check約束

使用check(檢查)子句可保證屬性值滿足某些前提條件。其一般格式為:

check(《條件》)

它既可跟在屬性定義的後面,也可在定義語句中另增一子句加以說明。

如:check(age>=18 and age<=65);

check(*** in (「男」,」女」));

check(dno in(select dno from department));

從上例中可以看出,check子句的條件中還可以帶子查詢。

3、基於元組的check約束

基於元組的check約束往往要涉及到表中的多個域。所以它是元組約束。在對整個元組完成插入或對某一元組的修改完成之後,系統將自動檢查是否符合check條件表示式。

若不符合條件,系統將拒絕該插入或修改操作。

基於元組check約束的說明方法是在create table語句中的屬性表、主碼、外部碼的說明之後加上check子句。

3.1.4 約束的更新

約束與資料庫中的表和檢視一樣,可以進行增、刪、改的更新操作。為了改和刪約束,需要在定義約束時對其進行命名,在各種約束的說明前加上關鍵字constraint 和該約束的名稱即可。

例如:在employee表的create table語句中:

eno char(4) constraint pk_employee primary key,

dno char(4)constraint fk_employee foreign key references department(dno);

當對各種約束進行命名後,就可以用alter table語句來更新與屬性或表有關的各種約束。如:

alter table employee drop constraint fk_employee;

aler table salary add constraint rightsalary check(insure+fund

上述的增加約束,實際上也是通過alter table語句定義約束的一種形式。

sql不能直接修改約束,修改某一個約束實際上是用alter table 語句先刪除該約束,然後再增加一個與該約束同名的新約束。

資料庫的完整性包含哪些完整性約束

資料完整性約束指的是為了防止不符合規範的資料進入資料庫,在使用者對資料進行插入 修改 刪除等操作時,dbms自動按照一定的約束條件對資料進行監測,使不符合規範的資料不能進入資料庫,以確保資料庫中儲存的資料正確 有效 相容。資料庫的完整性約束包含以下型別 1 與表有關的約束 是表中定義的一種約束。可在...

什麼是資料庫的完整性約束條件,資料庫的完整性包含哪些完整性約束

做低你偶像 儲在資料庫中的所有資料值均正確的狀態。如果資料庫中儲存有不正確的資料值,則該資料庫稱為已喪失資料完整性。資料完整性 data integrity 是指資料的精確性 accuracy 和可靠性 reliability 它是應防止資料庫中存在不符合語義規定的.什麼是資料庫的完整性約束條件 這...

資料庫的SQL,什麼是資料庫 微軟的SQL又是什麼

public sqlconn as adodb.connection 定義一個資料庫連線sqlconn on error goto handler 發生錯誤時跳轉到 handler標籤 set sqlconn new adodb.connection 例項化sqlconn sqlconn.curso...