1. 程式人生 > >mysql 資料庫快速入門 資料的完整性

mysql 資料庫快速入門 資料的完整性

目錄

資料的完整性

完整性的分類

實體完整性

實體完整性約束分類

主鍵約束(primary key)  

唯一約束(unique)

自動增長列(auto_increment)

域完整性

域完整性約束分類 

資料型別:(數值型別、日期型別、字串型別)

非空約束:not null

預設值約束 default

引用完整性(參照完整性)

表與表之間的關係

一對一

一對多(多對一)

多對多


資料的完整性

  • 保證使用者輸入的資料儲存到資料庫中是正確的。
  • 確保資料的完整性 = 在建立表時給表中新增約束。

完整性的分類

  • 實體完整性:
  • 域完整性:
  • 引用完整性:

實體完整性

  • 實體:即表中的一行(一條)記錄代表一個實體(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表,即人和身份證。這種情況需要找出主從關係,即誰是主表,誰是從表。人可以沒有身份證,但身份證必須要有人才行,所以人是主表,而身份證是從表。設計從表可以有兩種方案:
  1. 在t_card表中新增外來鍵列(相對t_user表),並且給外來鍵新增唯一約束;
  2. 給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表的外來鍵。