表的完整性約束做用 : 用於保證數據的完整性數據庫
常見的表的約束有 : PRIMARY KEY(PK主鍵) , FOREIGN KEY(FK外鍵) , NOT NULL , UNIQUE KEY(惟一鍵) , AUTO_INCREMENT , DEFAULT(默認值)ide
一 . DEFAULT , NOT NULLspa
說明 : default : 指定默認值3d
not null : 不容許爲空 , 就相似咱們在網上註冊帳號時 , 有些內容必需要填寫 , 空着就提交不了blog
例 : 建立 school 數據庫 , 在 school 數據庫中建立 student 表 , 字段有學號id , 姓名name , 性別sex ; 設置 id , name不容許爲空 ,sex不容許爲空 , 且sex默認設置爲男 .同步
建立表後查看student表的結構 , 能夠看到null都爲no , default選項sex字段默認爲mit
如今插入一條數據 , 如 : insert into student value(1,'jack','m');table
從上圖能夠看出成功插入 , 再次插入一條數據 : insert into student(id,name) value(1,'lucy');class
只插入兩個字段 , sex字段沒有數據插入 , 但由於該字段不容許爲空且默認值設爲m , 因此會默認記錄爲mtest
二 . 設置惟一約束 UNIQUE
惟一約束 : 控制此列的值不容許重複 , 必須是惟一的一個值
例 : 建立student2表 , 在student表的基礎上把id字段設爲unique
create table student2( id int unique, name varchar(50) not null, sex enum('m','f')default 'm' not null);
能夠看到id字段key爲UNI , 這時插入兩條記錄
能夠看出 , 由於id字段設置了unique , 插入兩條記錄的id值都爲1 , 因此插入數據報錯
三 . 設置主鍵約束 PRIMARY KEY
primary key 字段的值是不容許重複 , 且不容許爲空 , 即 UNIQUE + NOT NULL
主鍵有單列主鍵和多列主鍵(複合主鍵) ,多列主鍵即兩條或兩條以上的字段設置爲主鍵
例 : 建立student3表 , 將字段 id 設爲主鍵
create table student3(id int primary key ,name varchar(50) not null ,sex enum('m','f'));
設置主鍵以後 , 插入數據時id字段的值不能爲空且不能出現相同時 , 才能插入成功
(複合主鍵同理 , 即多個字段設置primary key 或 not null unique)
四 . 設置外鍵約束 FOREIGN KEY
外鍵功能 : 設置字表與父表 , 對父子表進行同步更新 , 同步刪除
實例 : 在test表中建立一張員工(employees)表 , 一張工資(payroll)表 , 將兩張表設置外鍵
員工表(父表) :
工資表(子表)
查看這兩張表結構:
建立完兩張表後 , 在父表employees中插入tom , jack 的記錄
在字表中插入一條Lucy的記錄 , 從下圖看出插入數據Lucy會報錯 , 由於作了外鍵 , 而且父表中沒有Lucy的信息
再在payroll表中插入tom ,jack字段 :insert into payroll(id,pname,payroll) values (1,'tom',15.6), (2,'jack',100.5);
插入值以後 , 將父表employees中的tom改成tomer , 再看看字表中的變化 , 子表的tom也變成了tomer
結論:
0、外鍵的做用就是實如今子表中引用父表中某列的值,這樣子表中外鍵的值是依賴於父表的。
一、父表中的主鍵才能做爲子表中的外鍵。
二、當父表中某個員工的記錄修改時,子表也會同步修改
三、當父表中刪除某個員工的記錄,子表也會同步刪除
五 . 設置自增字段值 AUTO_INCREMENT
例 : 在test庫中建立一張zhi表 ,將id設置成自增
建立表以後插入數據 : insert into zhi(name,age) values('tom',18),('jack',19),('lucy',20); #能夠看出插入的數據沒有id自段
插入上述字段能夠看出 , id 字段自動一自增的形式自動補全數據