mysql 資料庫快速入門 資料的完整性
阿新 • • 發佈:2019-01-04
目錄
資料的完整性
- 保證使用者輸入的資料儲存到資料庫中是正確的。
- 確保資料的完整性 = 在建立表時給表中新增約束。
完整性的分類
- 實體完整性:
- 域完整性:
- 引用完整性:
實體完整性
- 實體:即表中的一行(一條)記錄代表一個實體(entity)
- 實體完整性的作用:標識每一行資料不重複。
實體完整性約束分類
- 主鍵約束(primary key)
- 唯一約束(unique)
- 自動增長列(auto_increment)
主鍵約束(primary key)
- 注意:每個表中要有一個主鍵。
- 特點:資料唯一,且不能為null
// 第一種新增方式: CREATE TABLE student( id int primary key, name varchar(50) ); // 第二種新增方式:此種方式優勢在於,可以建立聯合主鍵 CREATE TABLE student( id int, name varchar(50), primary key(id) ); CREATE TABLE student( classid int, stuid int, name varchar(50), primary key(classid,stuid) ); // 第三種新增方式: CREATE TABLE student( id int, name varchar(50) ); ALTER TABLE student ADD PRIMARY KEY (id);
唯一約束(unique)
- 特點:資料不能重複。
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
自動增長列(auto_increment)
- 注意:sqlserver資料庫中為 (identity) oracle資料庫中為( sequence)
// 給主鍵新增自動增長的數值,列只能是整數型別 CREATE TABLE student( Id int primary key auto_increment, Name varchar(50) ); INSERT INTO student(name) values(‘tom’);
域完整性
- 注意:域完整性的作用:限制此單元格的資料正確,不對照此列的其它單元格比較。域代表當前單元格
域完整性約束分類
- 非空約束(not null)
- 預設值約束(default)
- check約束(mysql不支援)
- check(sex='男' or sex='女')
資料型別:(數值型別、日期型別、字串型別)
mysql的資料型別就是一種約束
非空約束: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);
引用完整性(參照完整性)
- 外來鍵約束: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 , -- 外來鍵列的資料型別一定要與主鍵的型別一致
CONSTRAINT fk_score_sid foreign key (sid) references student(id)
);
// 第二種新增外來鍵方式
ALTER TABLE score ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
表與表之間的關係
一對一
- 例如t_person表和t_card表,即人和身份證。這種情況需要找出主從關係,即誰是主表,誰是從表。人可以沒有身份證,但身份證必須要有人才行,所以人是主表,而身份證是從表。設計從表可以有兩種方案:
- 在t_card表中新增外來鍵列(相對t_user表),並且給外來鍵新增唯一約束;
- 給t_card表的主鍵新增外來鍵約束(相對t_user表),即t_card表的主鍵也是外來鍵。
一對多(多對一)
- 最為常見的就是一對多!一對多和多對一,這是從哪個角度去看得出來的。t_user和t_section的關係,從t_user來看就是一對多,而從t_section的角度來看就是多對一!這種情況都是在多方建立外來鍵!
多對多
- 例如t_stu和t_teacher表,即一個學生可以有多個老師,而一個老師也可以有多個學生。這種情況通常需要建立中間表來處理多對多關係。例如再建立一張表t_stu_tea表,給出兩個外來鍵,一個相對t_stu表的外來鍵,另一個相對t_teacher表的外來鍵。