約束: 為什麼要使用約束? 為了保障數據的合法性,完整性 分類: not null:非空約束,數據不能為空 例如:學生表的姓名欄位 create table student(id int,name char(10) not null,sex char(1) default "woman") uniq ...
約束:
為什麼要使用約束?
為了保障數據的合法性,完整性
分類:
not null:非空約束,數據不能為空
例如:學生表的姓名欄位
create table student(id int,name char(10) not null,sex char(1) default "woman")
unique: 唯一的約束,該欄位的值不能重覆,例如:身份證,手機號,學號
unique其實是一種索引,索引是一種數據結構,用於提高查詢效率,它可以為空,一張表中可以有多個唯一約束
單例唯一約束
create table t5(idcard char(18) unique);
多列聯合唯一約束
create table t6(idcard char(18),phonenumber char (11),unique(idcard,phonenumber));
意思: 身份證相同並且手機號相同,那就叫相同
primary key :稱之為主鍵約束,用於唯一標識表中一條記錄
如何能做到唯一標識,該欄位只要是唯一的並且不為空即可 ,也就是從約束的角度來看主鍵約束和非空加唯一約束沒有區別。
那他們之間的區別是什麼?
唯一約束是一種索引,必然存在硬碟上的某個文件中,是物理層面,primary key是一種邏輯意義上的數據,實際上不存在。
語法:
create table stu(stuid int primary key,name char(3));
create table t7(id int unique not null,name char(3));
有主鍵和沒有主鍵的區別?
1.無法區分兩個相同記錄,比如班級里的兩個人名字相同
2.有主鍵意味著有索引,效率更高
3.可以建立關聯聯繫
要不要主鍵?
必需的,每個表都應該有主鍵,哪怕不用唯一標識,也應該考慮提升效率,主鍵的欄位名幾乎都叫id
同一個表中可不可以有多個主鍵?
不可以,沒有任何意義
主鍵的類型需要設置為整型
練習 創建一個員工表 裡面存儲 員工信息 員工編號 姓名 年齡 性別 create table employee (id int primary key,name char(10) not null,age int not null,sex char(10) default "man"); 插入數據 INSERT INTO employee VALUES(1,"楊總",20),(2,"egon",49),(3,"wxx",28); 問題? 你很可能忘記上一次的id到第幾了 導致你要先查看一下 麻煩影響效率 所以有了auto_increment auto_increment ****** 中文 自動增長 作用 通常搭配主鍵欄位使用 可以自動為你的數據分配逐漸 如何分配的? 添加一條就自動加1 計數從1開始 語法: ****** create table t9(id int primary key auto_increment,name char(3)); 如果主鍵是自動增長 你可以跳過這個欄位 也可以為它插入null 都可以 修改自動增長的起始位置 ** alter table t9 auto_increment = 7; 註意: 自動增長 只能用於整型
foreign key:專門用於為表和表之間建立物理關聯
思考:
兩個表之間能產生的關係頭哪些? 1.多對多;2.多對一;3.一對一;4.一對多 在查表之間的關係時,要站在不同的角度去思考。例如對一個公司而言: 1. 從員工出發,員工對部門來說,多個員工對應一個部門 2.從部門出發,一個部門對應多個員工 如果兩個得到的關係不同,則認為這種多對一的關係時單向的 練習:設計學員表和班級表(外鍵加到從表上) create table class (id int primary key auto_increment,name char(10),manager char(10)); create table student (id int primary key auto_increment,name char(10),manager char(10),c_id int,foreign key(c_id)references class(id));
總結:外鍵的作用,表與表之間建立聯繫
添加 外鍵約束時:產生的限制
被關聯的表需要先被創建,部門數據(主表)應該先插入,員工數據(從表)後插入,在刪除部門數據前,要保證該部門的員工數據都刪除了,在更新部門編號前,要先保證沒有員工關聯到這個部門
簡單來說,外鍵指的就是另一張的主鍵
外鍵加上以後,主表中的數據刪除和更新時都受到限制
解決方案是為外鍵添加級聯操作
級聯操作:指的就是同步更新和刪除
語法:在創建外鍵時,在後面添加 on update cascade 同步更新;on delete cascade 同步刪除 實例: create table class(id int primary key auto_increment,name char(10)); create table student( id int primary key auto_increment, name char(10), c_id int, foregin key(c_id) references class(id) on update cascade on delete cascade ); insert into class vallue(null,"python3期"); insert into student value(null,"張煜"’,1) 對主表的id進行更新,以及刪除某條主表記錄,來驗證效果
多對多關係的處理:
建立一個第三方表,專門存儲兩個表之間的關係,這個關係表應該有兩個欄位,分別關聯學生的id和老師的id,為了保證數據刷的合法性,完整性給這兩個欄位都添加外鍵約束
實例: create table teacher(id int primary key auto_increment,name char(10)); create table student(id int primary key auto_increment,name char(10)); create table t_s(t_id int, s_id int, foregin key(t_id) referenses teacher(id), foregin key(t_id) referenses student(id), primary key(t_id,s)id)); insert into student value(null,"lxx"); insert into teacher value(null,"exx"); insert into t_s value(1,1);實例