為了保證資料的完整性,不會出現重複和型別錯誤,比如,成績裡面出現了姓名,兩個
人有同乙個身份證號等等。我們還要對資料進行約束,來保證資料的完整性,我們常用
以下三種型別的約束來保證資料的完整性。
實體完整性
域(列)完整性
引用完整性
一.、實體完整性
實體完整性的作用:就是保證實體具有唯一標識(也就是保證所有的行唯一),那麼如
何做才能保證實體完整性呢?我們可以通過主鍵約束、標識列或唯一約束 來保證每一
行都不會有重複。
主鍵約束(primary key):
什麼叫主鍵約束呢?主鍵約束就是,我們找到一列資料(比如學生資訊,學生資訊包
括:學號、姓名、班級、家庭位址、身份證號),比如學號,每個學號都只代表乙個
人,我們就可以用這個學號來作為 主 鍵。那麼我們怎麼讓這一列成為主鍵呢?光靠
說肯定不行,有兩種方法:
第一種方法:建表的時候就表明誰是主鍵,這是最常用的一種方法。舉個栗子:
create table students
( studentid int identity(10000,1) primary key, -學號(主鍵)
-從10000開始,每次遞增1
studentname varchar(20) not null,
gender char(2) not null,
studentidno numeric(18,0) not null - 身份證號
classid int refernces studentsclass (classid) - 班級編號(外來鍵)
)
我們在列的特徵那加上 primary key來表明這就是主鍵,就是這麼簡單。
第二種方法:就是使用新增約束的基本語法,這種不常用,了解就好
語法結構:
alter table 表名 add constraint 約束名 約束型別 具體的約束說明
比如: alter table students add constraint pk_studentid primary key (studentid)
一般情況下,每乙個表都要有乙個主鍵,乙個資料表必須有主鍵才有意義,如果你找的
這個主鍵並不能作為這一行的唯一區分,那麼就說明這個主鍵你找錯了。如果找了半天
都沒有找到合適的一列來作為主鍵呢,又該怎麼辦?別急,如果找不到,我們就給他加
上這麼一列,這一列就是標識列,我們用標識列來作為主鍵。
二.、域(列)完整性
域(列)完整性的作用就是保證實體的屬性值符合規範要求,比如年齡裡面不能出現地
名,對年齡進行範圍限制等。我們可以使用檢查約束(check key),預設值(default),
非空約束,資料型別來對資料進行約束。
檢查約束與預設約束:
alter table students add constraint ck_age check (ck_age )
建立預設約束
alter table students add constraint df_studentsaddress default(d"位址不詳") for
studentsaddress
三.、引用完整性
引用完整性就是我們所說的外來鍵關係,為了保證兩表種相同屬性值的一致性,建立外來鍵
關聯另乙個表的主鍵。
方法:外來鍵約束(foreign key)
alter table students add constraint fk_classid foreign key(classid) refeences
studentsclass (classid)
classid是studentsclass表中的主鍵,是students中的外來鍵
注意:新增資料時,要首先新增主鍵表,再新增外來鍵表,刪除資料時,要先刪除外來鍵表
資料,再刪除主鍵表資料。
建立完乙個完整的資料庫,接下來就是資料的增 刪 查 改,請看下篇。。。
資料庫 Sql總結
關係型資料庫 mysql oracle db2 sqlserver 非關係型資料庫 redis mongodb a 關係型資料庫 是指採用了關係模型來組織資料的資料庫。關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。優點 可以使用sql語言便捷的運算元據...
資料庫sql指南總結
資料庫sql指南總結 mysql引擎 一。myisam 記憶體中只快取索引,不快取資料 不支援事務 只支援表級鎖,支援insert操作和select操作併發進行 適合讀多寫少的應用,如web 支援全文索引 二。innodb 事物資料庫首選 索引和資料都可以快取到記憶體中 支援事務 支援行級鎖,可實現...
Oracle資料庫SQL總結
1oracle時間段的查詢 1.1 場景 根據使用者輸入的時間段過濾出相應記錄。1.2 解決辦法 第一種寫法 sql select from t xjxx xjgl where createdate to date 2011 6 13 yyyy mm dd and createdate to dat...