MySQL进阶2
數(shù)據(jù)完整性:
數(shù)據(jù)完整性:保證用戶輸入的數(shù)據(jù)保存到數(shù)據(jù)庫中是正確的
添加數(shù)據(jù)完整性:在創(chuàng)建表時給表中添加約束
數(shù)據(jù)完整性分類:實(shí)體完整性,域完整性,參照完整性
?
實(shí)體完整性:
表中的一行(一條記錄)代表一個實(shí)體:
實(shí)體完整性的作用:標(biāo)識每一行數(shù)據(jù)不重復(fù),行級約束
約束類型:主鍵約束,唯一約束,自動增長列
?
主鍵約束:
特點(diǎn):每個表中只有一個主鍵,數(shù)據(jù)唯一且不能為null
添加方式:
create table 表名(字段名1 數(shù)據(jù)類型 primary key, 字段名2 數(shù)據(jù)類型...);或 create table 表名(字段名1 數(shù)據(jù)類型, 字段名2 數(shù)據(jù)類型...primary key(要添加主鍵的字段名));
?
也可以先創(chuàng)建表,再修改表添加主鍵:
alter table 表名 add constraint primary key(字段名);?
聯(lián)合主鍵:兩個字段數(shù)據(jù)同時相同時,才違反聯(lián)合主鍵約束
?
唯一約束:
特點(diǎn):指定列的數(shù)據(jù)不能重復(fù),但可以為空值
添加方式:
create table 表名(字段名1 數(shù)據(jù)類型...字段名n 數(shù)據(jù)類型 unique...);?
自動增長列:
特點(diǎn):指定列的數(shù)據(jù)會自動增長,即使數(shù)據(jù)刪除,還是從刪除的序號繼續(xù)往下
添加方式:
create table 表名(字段名1 數(shù)據(jù)類型 priimary key auto_increment, 字段2 數(shù)據(jù)類型 unique);?
?
域完整性:
限制此單元的數(shù)據(jù)正確,不對照此列的其他單元格比較,域代表當(dāng)前單元格
?
域完整性約束:
數(shù)據(jù)類型:數(shù)值類型,日期類型,字符串類型
非空約束:
create table 表名(字段名1 數(shù)據(jù)類型 primary key auto_increment, 字段名2 數(shù)據(jù)類型 unique not null...);默認(rèn)值約束:
create table 表名(字段名1 數(shù)據(jù)類型 primary key auto_increment, 字段名2 數(shù)據(jù)類型 unique not null default 默認(rèn)值...);插入的時候,values當(dāng)中的值直接給default
?
?
參照完整性:
指表與表之間的一種對應(yīng)關(guān)系,通常情況下可以設(shè)置兩個表之間的主鍵外鍵關(guān)系或者編寫兩表之間的觸發(fā)器來實(shí)現(xiàn),有對應(yīng)參照完整性的兩張表格,在對他們進(jìn)行數(shù)據(jù)插入更新刪除的過程中,系統(tǒng)都會將被修改的表格與另一張對應(yīng)表格進(jìn)行對照,從而阻止一些不正確的數(shù)據(jù)的操作
特點(diǎn):數(shù)據(jù)庫的主鍵和外鍵類型一定要一致,兩個表必須是InnoDB類型,設(shè)置參照完整性后外鍵當(dāng)中的內(nèi)值必須得是主鍵當(dāng)中的內(nèi)容
?
一個表設(shè)置當(dāng)中的字段設(shè)置為主鍵,設(shè)置主鍵的為主表:
?
?
創(chuàng)建表時設(shè)置外鍵,設(shè)置外鍵的為子表:
?
?
posted on 2018-09-17 19:11 732618078 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/xzx123/p/9664272.html
總結(jié)
- 上一篇: 在linux或者windows上直观查看
- 下一篇: lazy初始化和线程安全的单例模式