中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中常見的約束類型有哪些

發布時間:2021-09-08 13:39:18 來源:億速云 閱讀:147 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“MySQL中常見的約束類型有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“MySQL中常見的約束類型有哪些”這篇文章吧。

1. not null

保證指定不能存儲NULL值,如果插入NULL則插入失敗。

我們定義兩張數據表,分別是student表和student_copy表,student表設定相關約束,student_copy表作為其對照表,不設置任何約束來觀察兩者的區別。

MySQL中常見的約束類型有哪些

student表中id定義了not null,所以id這一行的NULL = NO,意思是這一行數據不能為NULL,否則會插入失敗。

MySQL中常見的約束類型有哪些

student_copy表中沒有進行任何約束,所以任何字段的NULL = YES,意味著用戶可以隨意插入空值而不會報錯。

Q:not null約束下除了顯式的指定插入NULL會報錯外,隱式的NULL會報錯嗎?

NULL指定有兩種方式,分別是顯式和隱式。

顯式指的是插入時設定該列為NULL,而隱式指的是插入時對該列沒有賦值,而這一列又沒有指定默認值,系統默認的默認值是NULL,所有這中情況下也會觸發插入控制的錯誤。

MySQL中常見的約束類型有哪些

MySQL中常見的約束類型有哪些

2. unique

保證某列的每行必須有唯一的值,也就是說,指定列的每行數據都不能重復。

下面兩張圖分別是對student表和student_copy表的操作,student表的id列設置了unique約束,所以在插入同樣的id = 1時會顯示重復操作。

MySQL中常見的約束類型有哪些

student_copy表中沒有進行任何約束,意味著用戶可以隨意插入任意值而不會報錯。

MySQL中常見的約束類型有哪些

Q:unique約束下插入NULL值會報錯嗎?

其實這個問題在剛才已經操作過了,student表中插入id = NULL,系統并不會報錯。unique只是保證存儲的值唯一,它可以是空值,但空值也得唯一,再插入NULL就會報錯。

3. default

規定沒有給列賦值時的默認值,換句話說就是,插入數據時沒有給指定列的值,那么其值就是defalut指定的默認值。

student表指定了name字段設置了default約束之后,default這一列就有了名字。當插入數據時,沒有指定name這一列,那么name這列就會按照我們設置的默認值 = '未命名'來填充。

MySQL中常見的約束類型有哪些

而student_copy表沒有設置default約束,所以當插入數據時,沒有指定的列會按照系統默認的默認值來填充,也就是NULL。

MySQL中常見的約束類型有哪些

4. primary key

not null + unique 的結合,保證某列具有唯一標識且不能存儲NULL值。

前幾個約束類型都是可以同時給多個列設置的,但是primary key一張表中只有能約束一列,使用primary key約束的列被稱為主鍵

和unique類型,插入的數據如果重復了,那么后一條數據會插入失敗,并且插入的數據不能為NULL。

MySQL中常見的約束類型有哪些

一個表中只能由一列時主鍵,不能同時有多列是主鍵。設計表的時候,一般最好設定一個主鍵,常見的主鍵都是數字形式的。

MySQL中常見的約束類型有哪些

自增主鍵auto_increment

在實際開發中,往往有一系列的策略來保證主鍵不重復,最常見的方法就是設置自增主鍵,系統可以自動給數據分配,用戶也可以同時手動進行干預,因為MySQL中內置了自增主鍵功能,所以使用非常簡單.

下圖中id這一列就變成了自增主鍵,用戶在插入數據時,就可以不必手動干預了.

MySQL中常見的約束類型有哪些

Q:執行以下操作,猜想該表的查詢結果是什么?

已知Id字段設置為自增主鍵.

MySQL中常見的約束類型有哪些

張三的id = null,由于自增主鍵按照順序它的id = 1;李四的id = 1,主鍵不能重復,李四的id和張三的id重復,所以插入失敗;繼續插入李四數據,此時設置id = 4,沒有和原有數據重復,所以插入成功;王五的id = null,按照自增主鍵接著上一個順序往下走,所以它的id = 5;

那么我們來看一下結果:

MySQL中常見的約束類型有哪些 

5. foreign key

外鍵用于關聯其他表的主鍵,保證一個表中的數據匹配另一個表中的值的參照完整性。

foreign key (字段名) references 主表(列)

下面我們舉個例子來理解下,我們現在創建兩張表并想把它們關聯起來,應該如何操作呢?

首先思考一下這個對應關系,一個學生對應一個班級,一個班級對應多個學生.在學生表中id為主鍵,那我們可以設置學生class_id為外鍵,去關聯比班級表.

創建班級表class,設置classsId為主鍵

create table class (
 id int primary key auto_increment,
 name varchar(20)
);

創建學生表student,設置id為主鍵

create table student (
 id int primary key auto_increment,
 name varchar(20),
 class_id int,
 foreign key (class_id) references class(id)
);

MUL表示外鍵約束;

MySQL中常見的約束類型有哪些

外鍵的使用規則

學生表中的插入的班級Id,必須在班級表中存在;

MySQL中常見的約束類型有哪些

班級表是空的,這個時候插入學生表數據并給class_id = 1,而班級號在班級表中是空的,所以插入失敗.學生表指定的這個外鍵約束,必須是班級表的主鍵;外鍵約束建立好了以后,此時班級表中的班級id就不能再隨意修改或刪除;

MySQL中常見的約束類型有哪些

我們無法將班級表中id = 1的記錄修改為id = 20,因為學生表中的張三依賴于班級表id = 1這樣的結果.

外鍵的缺點

加入假如我們有下面這樣一個商品-訂單關聯的兩張表

MySQL中常見的約束類型有哪些

此時我們可以使用訂單表中的商品id和商品表中的商品id建立外鍵約束,但是當訂單表中有了一個商品Id為1的記錄時,就無法刪除商品表中的id = 1的記錄了,那么這個數據就會持久的存下去,但是商品不一定永久存在,很有可能就下架了,這就是外鍵在關聯某些表時的矛盾所在.

如果我們既希望擁有外鍵約束的校驗功能,同時也希望可以解決當前的矛盾,那么我們可以進行邏輯刪除:給商品單獨添加一列,標識數據是否有效,設定flag = 1表示記錄有效,flag = 0表示記錄無效.需要刪除的商品,可以直接把它的標識改為0,邏輯上標識已經刪除了該商品,但實際上該數據還在表中存儲,并不是真正意義上的物理刪除.

6. check

保證列中的值符合指定的條件。

以上是“MySQL中常見的約束類型有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海城市| 万盛区| 青河县| 土默特左旗| 驻马店市| 府谷县| 北流市| 肇州县| 金秀| 绩溪县| 甘德县| 孝义市| 临清市| 武隆县| 澳门| 常州市| 安化县| 宾川县| 育儿| 海门市| 桓台县| 海南省| 茂名市| 井研县| 克拉玛依市| 阿克苏市| 姚安县| 惠水县| 获嘉县| 辽宁省| 甘肃省| 密云县| 东方市| 突泉县| 福海县| 桦南县| 鹿泉市| 高雄市| 乌拉特中旗| 巩义市| 柘城县|