保證用戶輸入的數據保存到數據庫中是正確的。mysql
在建立表時給表中添加約束sql
- 實體完整性
- 域完整性
- 參照完整性
表中的一行(一條記錄)表明一個實體(entity)數據庫
標識每一行數據不重複。行級約束3d
- 主鍵約束(primary key)
- 惟一約束(unique)
- 自動增加列(auto_increment)
特色:code
- 每一個表中要有一個主鍵
- 數據惟一,且不能爲null
添加主鍵約束的方式blog
CREATE TABLE 表名(字段名1 數據類型 primary key,字段2 數據類型); CREATE TABLE 表名(字段1 數據類型, 字段2 數據類型,primary key(要設置主鍵的字段)); CREATE TABLE 表名(字段1 數據類型, 字段2 數據類型,primary key(主鍵1,主鍵2));
聯合主鍵: 兩個字段數據同時相同時,才違反聯合主鍵約束。圖片
1.先建立表rem
2.再去修改表,添加主鍵字符串
ALTER TABLE student ADD CONSTRAINT PRIMARY KEY (id);
特色:it
- 指定列的數據不能重複
- 能夠爲空值
CREATE TABLE 表名(字段名1 數據類型 字段2 數據類型 UNIQUE);
特色:
- 指定列的數據自動增加
- 即便數據刪除,仍是從刪除的序號繼續往下
CREATE TABLE 表名(字段名1 數據類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數據類型 UNIQUE);
限制此單元格的數據正確,不對照此列的其它單元格比較
域表明當前單元格
域完整性約束:
數據類型 :
數值類型、日期類型、字符串類型
非空約束(not null)
CREATE TABLE 表名(字段名1 數據類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數據類型 UNIQUE not null);
默認值約束(default)
CREATE TABLE 表名(字段名1 數據類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數據類型 UNIQUE not null default '男');
插入的時候,values當中的值直接給default
什麼是參照完整性
是指表與表之間的一種對應關係
一般狀況下能夠經過設置兩表之間的主鍵、外鍵關係,或者編寫兩表的觸發器來實現。
有對應參照完整性的兩張表格,在對他們進行數據插入、更新、刪除的過程當中,系統都會將被修改表格與另外一張對應表格進行對照,從而阻止一些不正確的數據的操做。
數據庫的主鍵和外鍵類型必定要一致;
兩個表必須得要是InnoDB類型
設置參照完整性後 ,外鍵當中的內值,必須得是主鍵當中的內容
一個表設置當中的字段設置爲主鍵,設置主鍵的爲主表
CREATE TABLE student(sid int PRIMARY key,name varchar(50) not null,sex varchar(10) default '男');
建立表時,設置外鍵,設置外鍵的爲子表
CREATE TABLE score( sid INT, score DOUBLE, CONSTRAINT fk_stu_score_sid FOREIGN KEY(sid) REFERENCES student(id));
- 學生選課,一個學生能夠選修多門課程,每門課程可供多個學生選擇。
- 一個學生能夠有多個老師,而一個老師也能夠有多個學生
建立老師表
建立學生表
建立學生與老師關係表
關係圖
添加外鍵
合併結果集就是把兩個select語句的查詢結果合併到一塊兒
- UNION
合併時去除重複記錄- UNION ALL
合併時不去除重複記錄
格式:
UNION:
SELECT * FROM 表1 UNION SELECT * FROM 表2; SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
建立表:
UNION:
UNION ALL:
注意事項:被合併的兩個結果:列數、列類型必須相同。
也能夠叫跨表查詢,須要關聯多個表進行查詢
假設集合A={a,b},集合B={0,1,2},
則兩個集合的笛卡爾積爲{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
能夠擴展到多個集合的狀況
同時查詢兩個表,出現的就是笛卡爾集結果
內鏈接
圖示:
做用:查詢兩張表的共有部分
語句:
Select <select_list> from tableA A Inner join tableB B on A.Key = B.Key
示例:
SELECT * from employee e INNER JOIN department d on e.depart_id = d.id;
多表鏈接:
建表:
使用99鏈接法:
使用內聯查詢
圖示
做用: 把左邊表的內容所有查出,右邊表只查出知足條件的記錄
語句:
Select <select_list> from tableA A Left Join tableB B on A.Key = B.Key
示例
SELECT * from employee e LEFT JOIN department d on e.depart_id = d.id;
圖示:
做用
把右邊表的內容所有查出,左邊表只查出知足條件的記錄
語句
Select <select_list> from tableA A Right Join tableB B on A.Key = B.Key
示例
SELECT * from employee e RIGHT JOIN department d on e.depart_id = d.id;