本文目錄
一、SQL註釋
- 單行註釋
-- 註釋說明 或 # 註釋說明
- 多行註釋
/* */
二、數據完整性
- 實體完整性:
- 主鍵約束
- 唯一約束
- 標識列
- 域完整性:
- 數據類型約束
- 非空約束
- 默認值約束
- 引用完整性
- 主外鍵約束
- 自定義完整性
- 存儲過程
- 觸發器
三、主表和從表
- 主表中沒有的,從表不允許插入。
- 從表中有的,主表中不允許刪除。
- 刪除主表中,先刪從表。
四、外鍵
外鍵只有在nnodb引擎才能支持外鍵。外鍵是從表中的公共字段。
-
創建主表:
-
創建從表:
主表中沒有的,從表不允許插入:
先插入主表的數據,再插入從表數據:
從表中有的,主表中不允許刪除(要先刪從表再刪主表):
通過修改表的時候添加外鍵:
alter table 從表名 add foreign key(公共字段) references 主表名(公共字段)
。刪除外鍵,通過外鍵的名字刪除外鍵:
4.1 三種外鍵操作
4.1.1 嚴格限制
- 主表中沒有的,從表不允許插入。
- 從表中有的,主表中不允許刪除。
- 刪除主表中,先刪從表。
4.1.2 置空操作(set null)
如果主表記錄刪除,或關聯字段更新,則從表外鍵字段被設置爲null。
4.1.3 級聯操作(cascade)
如果主表記錄刪除,則從表記錄也被刪除,主表更新,從表外鍵字段也更新。
語法: foreign key(外鍵字段) references 主表名 (關聯字段) [主表記錄刪除時的動作] [主表記錄更新時的動作]
一般說刪除時置空,更新時級聯。
4.1.4 例題與小結
-
例題
現在來試試主表刪除和更新,從表是否也會刪除和更新:
更新:
刪除:
-
小結
置空級聯操作中外鍵不能是從表的主鍵。
4.2 解決插入數據時主鍵衝突
創建表:
create table ct(
id char(4) primary key,
name varchar(20)
) engine=innodb;
插入數據:
insert into ct values ('ct01', 'jack');
當再次插入數據:
如果插入的主鍵重複就會報錯。
- 解決方法一:如果插入的主鍵重複就執行替換。
語法:replace into 表名 values ()
使用此語法如果數據不存在,可以直接插入:
- 解決方法二:
語法:on duplicate key update
當插入的值與主鍵或唯一鍵有衝突執行update的操作:
推薦使用方法二。
在學習的MySQL的路上,如果你覺得本文對你有所幫助的話,那就請關注點贊評論三連吧,謝謝,你的肯定是我寫博的另一個支持。