數(shù)據(jù)的完整性
作用:保證用戶輸入的數(shù)據(jù)保存到數(shù)據(jù)庫中是正確的奏寨。
確保數(shù)據(jù)的完整性=在創(chuàng)建表時給表中添加約束
完整性的分類:
>實體完整性
>域完整性
>引用完整性
5.1 實體完整性
實體:即表中的一行(一條記錄)代表一個實體(entity)
實體完整性的作用:標識每一行數(shù)據(jù)不重復。
約束類型:主鍵約束(primary key)唯一約束(unique)自動增長列(auto_increment)
主鍵約束(primary key)
特點:數(shù)據(jù)唯一既忆,且不能為null
例:
第一種添加方式:
CREATE TABLE
student(
Id int primary key,
Name varchar(50)
);
第一種添加方式:此種方式優(yōu)勢在于,可以創(chuàng)建聯(lián)合主鍵
CREATE TABLE
student(
id int,
Name varchar(50),
Primary key(id)
);
CREATE TABLE
student(
id int,
Name varchar(50),
Primary key(id套啤,name)
);
第三種添加方式:
CREATE TABLE
student(
Id int,
Name varchar(50)
);
ALTER TABLE
student
ADDPRIMARY KEY (id);
.唯一約束(unique):
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
自動增長列(auto_increment)
給主鍵添加自動增長的數(shù)值蚯舱,列只能是整數(shù)類型,但是如果刪除之前增長的序號佩憾,后面再添加的時候序號不會重新開始哮伟,而是會接著被刪除的那一列的序號
CREATE TABLE
student(
Id int primary key auto_increment,
Name varchar(50)
);
INSERT INTO
student(name) values(‘tom’);
5.2 域完整性
域完整性的作用:限制此單元格的數(shù)據(jù)正確,不對照此列的其它單元格比較
域代表當前單元格
域完整性約束:數(shù)據(jù)類型非空約束(not
null)默認值約束(default)
Check約束(mysql不支持)check();
數(shù)據(jù)類型:(數(shù)值類型妄帘、日期類型楞黄、字符串類型)
非空約束:not null
CREATE TABLE
student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
);
INSERT INTO
student values(1,’tom’,null);
默認值約束default
CREATE TABLE
student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default ‘男’
);
insert into
student1 values(1,'tom','女');
insert into
student1 values(2,'jerry',default);
5.3 引用完整性
要有外鍵必須先有主鍵,主鍵和外鍵的類型必須一致
外鍵約束:FOREIGN KEY
例:
CREATE TABLE
student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default ‘男’
);
create table
score(
id int,
score int,
sid int , --外鍵列的數(shù)據(jù)類型一定要與主鍵的類型一致
CONSTRAINT fk_score_sid foreign key (sid)references student(id)
);
第二種添加外鍵方式抡驼。
ALTER TABLE
score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
5.4 表與表之間的關系
l一對一:例如t_person表和t_card表鬼廓,即人和身份證。這種情況需要找出主從關系致盟,即誰是主表碎税,誰是從表。人可以沒有身份證馏锡,但身份證必須要有人才行雷蹂,所以人是主表,而身份證是從表杯道。設計從表可以有兩種方案:
?在t_card表中添加外鍵列(相對t_user表)匪煌,并且給外鍵添加唯一約束;
?給t_card表的主鍵添加外鍵約束(相對t_user表)蕉饼,即t_card表的主鍵也是外鍵虐杯。
l一對多(多對一):最為常見的就是一對多!一對多和多對一昧港,這是從哪個角度去看得出來的擎椰。t_user和t_section的關系,從t_user來看就是一對多创肥,而從t_section的角度來看就是多對一达舒!這種情況都是在多方創(chuàng)建外鍵!
l多對多:例如t_stu和t_teacher表叹侄,即一個學生可以有多個老師巩搏,而一個老師也可以有多個學生。這種情況通常需要創(chuàng)建中間表來處理多對多關系趾代。例如再創(chuàng)建一張表t_stu_tea表贯底,給出兩個外鍵,一個相對t_stu表的外鍵撒强,另一個相對t_teacher表的外鍵禽捆。