數(shù)據(jù)完整性分為:實體完整性,域完整性,參考完整性。
參考完整性:
參照完整性指的就是多表之間的設(shè)計,主要使用外鍵約束。
多表設(shè)計: 一對多、多對多、一對一設(shè)計
一:實體(行)完整性
實體完整性通過表的主鍵來實現(xiàn)。
使用主鍵來表示一條記錄的唯一,且不為空
語法:primary key
主鍵分類:
邏輯主鍵:例如ID,不代表實際的業(yè)務(wù)意義,只是用來唯一標(biāo)識一條記錄(推薦)
業(yè)務(wù)主鍵:例如username,參與實際的業(yè)務(wù)邏輯。
特點:唯一,not null
自動增長:auto_increment
例如:
create table person2(
id int primary key auto_increment,
name varchar(100)
);
二:域(列)完整性
非空約束:not null
唯一約束:unique
creat table person3(
id int not null unique,
name varchar(20) not null unique,
gender varchar(20) not null,
phone char(11) unique #不能有,
);
三:參照完整性
1,一對多
a:例如:客戶和訂單的關(guān)系就是一對多,一個客戶可以有多張訂單,一張訂單屬于一個客戶;
b:外鍵設(shè)置到多的一方
語法輸入創(chuàng)建一對多:
創(chuàng)建客戶表:
create table customers(
id int,
name varchar(20),
address varchar(100),
primary key(id)
);
創(chuàng)建訂單表:
create table orders(
id int,
order_num int primary key,
price float(4,2),
customer_id int,
constraint customer_ord_fk foreign key(customer_id) references customers(id)
);
注:constraint: 約束,foreign key: 外鍵,references: 參照
創(chuàng)建一個名叫customer_ord_fk的外鍵約束,外鍵指的是customer_id,參照的是 customers表中的id列
表格操作創(chuàng)建一對多
customers表
orders表
orders外鍵設(shè)置
創(chuàng)建一個名叫customer_ord_fk的外鍵約束,外鍵欄位customer_id,參照的是 customers表中的id列
擴(kuò)展:四種子表的刪除更新策略:
- 1,cascade 級聯(lián)策略:使用此種策略時主表的記錄被刪除或者主鍵字段被修改時會同步刪除或修改子表
- 2,no action 無動作策略:使用此種策略時要刪除主表必須先刪除子表,要刪除主表的記錄必須先刪除子表關(guān)聯(lián)的記錄,不能更新主表主鍵字段的值
- 3,restrict 主表約束策略。此種策略對主表的約束跟 NO ACTION 一樣
- 4,set no置空策略。使用此種策略時,如果主表被刪除或者主鍵被更改,則將子表中的外鍵設(shè)置為null。需要注意的是,如果子表的外鍵是主鍵或者是設(shè)置為not null的,則主表的刪除和主鍵的更改跟 no action 一樣
2,多對多
創(chuàng)建老師表:
Create table teachers(
id int primary key auto_increment,
name varchar(20) ,
gender char(5),
subject varchar(20)
);
創(chuàng)建學(xué)生表:
Create table students(
id int primary key ,
name varchar(20),
age int
);
第三張為關(guān)聯(lián)表:
Create table teacher_student(
id int,
t_id int,
s_id int,
primary key(t_id,s_id)
constraint teacher_id_fk foreign key(t_id) references students(id),
constrains student_id_fk foreign key(s_id) references teachers(id)
);
表格操作多對多
創(chuàng)建老師表:
創(chuàng)建學(xué)生表:
第三張表:
3,一對一
(1)一般情況,設(shè)計一張表格即可
(2)設(shè)計成兩張表格
法1:第二張表格中創(chuàng)建一個字段作為外鍵(設(shè)置求唯一 unique)對應(yīng)第一張表格中的主鍵;
法2:直接使用第二張表格中的主鍵作為外鍵,對應(yīng)第一張表格的主鍵。
兩張表:unique很重要
create table user(
id int primary key auto_increment,
name varchar(20),
age int
);
create table card(
id int primary key auto_increment,
num varchar(20) not null,
address varchar(100) not null,
user_id int unique,
constraint user_card_fk foreign key(user_id) references user(id)
);
以上所述是小編給大家介紹的MySQL數(shù)據(jù)完整性詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- 基于MySQL數(shù)據(jù)庫的數(shù)據(jù)約束實例及五種完整性約束介紹
- 深入淺析MySQL從刪庫到跑路_高級(一)——數(shù)據(jù)完整性
- MySQL使用mysqldump+binlog完整恢復(fù)被刪除的數(shù)據(jù)庫原理解析
- Django配置MySQL數(shù)據(jù)庫的完整步驟
- php使用mysqli和pdo擴(kuò)展,測試對比mysql數(shù)據(jù)庫的執(zhí)行效率完整示例
- php使用mysqli和pdo擴(kuò)展,測試對比連接mysql數(shù)據(jù)庫的效率完整示例
- Spring MVC實現(xiàn)mysql數(shù)據(jù)庫增刪改查完整實例
- MySQL數(shù)據(jù)庫卸載的完整步驟
- C#連接mysql數(shù)據(jù)庫完整實例
- PHP中執(zhí)行MYSQL事務(wù)解決數(shù)據(jù)寫入不完整等情況
- MySQL是如何保證數(shù)據(jù)的完整性