91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

MySQL數據庫約束的操作方法是什么

發布時間:2023-01-12 09:33:36 來源:億速云 閱讀:152 作者:iii 欄目:開發技術

本篇內容主要講解“MySQL數據庫約束的操作方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL數據庫約束的操作方法是什么”吧!

一、約束是什么

約束就是,在創建表的時候,對表設置一些規則,只有滿足這些規則,才可以插入數據,我們把這些規則叫做約束

常見的約束有:

約束類型規則
Not Null指定某列不能存儲NULL值
UNIQUE保證某列的每行必須有唯一的值
DEFAULT給沒有賦值的列賦默認值
PRIMARY KEYNot NULL 與 UNIQUE的結合,一個表的特定記錄
FOREIGN KEY保證一個表匹配另一個表的值,遵守參照完整性
CHECK保證列符合指定條件

數據庫約束是數據庫的一個重要功能,數據的 “完整性”(正確的數據)可以通過人工的方式進行確定,但人工還是有一點的缺陷,約束,就是讓數據庫幫助我們更好的檢查數據是否正確

二、約束的具體操作

Not NULL

 create table stu(
 id int,
 name varchar(50),
 sex char(3)
 );

MySQL數據庫約束的操作方法是什么

當我們建一個表時,是允許為NULL的,如果我們不允許這一列為空時,我們就需要加上Not NULL約束。

 create table stu(
 id int not null,
 name varchar(50),
 sex char(3)
 );

MySQL數據庫約束的操作方法是什么

當我們加上約束時,可以發現id這一列不允許為空,我們試著插入一個為NULL的id試一下。

MySQL數據庫約束的操作方法是什么

當我們插入的id為空時,系統會報id 這一列不能為空的錯誤。

MySQL數據庫約束的操作方法是什么

當我們插入一個非NULL的數據時,可以成功插入。

UNIQUE

在我們某些業務需要中某些列的數據不能夠重復,比如: 我們每個人的身份證號,大學生的學號,這些數據是唯一標識性的不能夠重復。

 create table stu(
 id int unique,
 name varchar(50),
 sex char(3)
 );

MySQL數據庫約束的操作方法是什么

這里的UNI == unique.

我們試著插入一下數據看看。

MySQL數據庫約束的操作方法是什么

我們可以發現再插入不同的id數據時是可以正常插入的,當我們再次插入已經出現過的id時,系統會報一個重復條目的錯誤。

一個小小的思考,數據庫是如何判斷你當前這一條記錄是否為重復的?

當然是先去查找,然后再去插入。

有的同學肯定會說,加上約束之后,數據庫的執行速度不就大大的下降了,這里的查找是(借助索引進行查找的,效率相對比較高,后面我們會介紹索引的相關知識),執行效率確實受到了一定的影響,但比起手工去檢查,代價小的很多。

約束的組合使用

約束不僅可以單獨使用,而且可以多個組合起來對某一列進行約束。

比如同時加上: Not NULL 和 unique(這里注意的是多個約束之間用空格間隔開,而不是逗號).

MySQL數據庫約束的操作方法是什么

我們可以發現約束之間用逗號間隔會報錯。

MySQL數據庫約束的操作方法是什么

我們可以發現當我們同時使用 Not NULL 和 unique約束時,出現了一個PRI,PRI == primary key,這是什么我們往下看。

MySQL數據庫約束的操作方法是什么

PRIMARY KEY

主鍵約束就是: not null + unique.

MySQL數據庫約束的操作方法是什么

我們試著插入幾組數據。

MySQL數據庫約束的操作方法是什么

我們可以發現主鍵列不能插入NULL類型的數據。

MySQL數據庫約束的操作方法是什么

我們可以發現主鍵列插入不同的數據是OK的,如果插入相同的數據,就會報錯。

主鍵也同樣是在插入記錄的時候,先查詢,在插入:

正因為主鍵和unique都有先查詢的過程,mysql就會默認給這些列添加索引,提高查詢速度。

MySQL數據庫約束的操作方法是什么

我們可以簡單來驗證一下,我們可以發現id列確實存在索引。

主鍵的注意事項:

1.在開發過程中,大部分的表都會存在一個主鍵,逐漸往往是一個整數類型的id.

2.在mysql中,一個表里,只能存在一個主鍵,不能多個。

3.mysql允許將多個列共同作為一個主鍵(聯合主鍵)

4.mysql有自帶的"自增主鍵"(主鍵需要保證不重復,如果我們手動生成的話比較困難,這時我們就可以讓mysql自動幫我們生成。

-- 設置自增主鍵
create table stu(id int primary key auto_increment);

MySQL數據庫約束的操作方法是什么

MySQL數據庫約束的操作方法是什么

當我們將某一列設置為自增主鍵時,如果需要系統自動生成的話,我們插入null即可, 這里的null不是說把這個值設置為Null,而是交給數據庫使用自增主鍵。

MySQL數據庫約束的操作方法是什么

每一個插入數據時,mysql都會找到上一條記錄,自增。

MySQL數據庫約束的操作方法是什么

我們也可以插入指定值。

MySQL數據庫約束的操作方法是什么

MySQL數據庫約束的操作方法是什么

我們可以發現,當我們指定值插入后,在使用自增主鍵,并不會去利用中間空余的間隙,而是參照最大值進行自增。(這里其實是我們很常見的一個用空間換取時間的行為).

如果mysql的數據量非常大時,自增主鍵還可以使用嗎?如果可以使用,又是如何分配呢?

當我們數據量較小時,所有的數據都在mysql服務器當中存儲。

但是如果mysql的數據量很大時,一臺主機可能放不下,就需要進行分庫分表的操作。

MySQL數據庫約束的操作方法是什么

當數據過多時,就需要分庫分表,實際上就是把一個大的表分為多個小的表,每個服務器存取一部分數據。

MySQL數據庫約束的操作方法是什么

這里我們就分為三個服務器進行存儲,每個服務器的表占各自的比例,三個服務器中的主鍵值是不能重復的。

三個服務器中的表的自增主鍵id是如何分配?

這里涉及到"分布式系統唯一id生成算法"

大概公式是: 時間戳 + 主機編號 + 隨機因子 > 這三部分得到一個全局唯一的id

DEFAULT

在某些情況下,有些列的值大多數都是重復的,比如一個班的30個人,28個是男生,只有兩個女生,那么我們就可以把性別列默認值設置為"男".

create table stu(id int primary key,name varchar(50),sex char(3) default '男');

MySQL數據庫約束的操作方法是什么

我們可以看到性別這一列默認為男。

MySQL數據庫約束的操作方法是什么

我們可以發現當我們沒有插入sex這一列,自動為默認值’男’.

FOREIGN KEY

外鍵約束是建立在兩張表之間的約束。

比如每個班的同學的班級號都是一樣的,我們就可以用班級號來建立班級表和學生表之間的約束.

create table class(classId int primary key,name varchar(50));

我們先創建一個班級表,插入一組數據。

MySQL數據庫約束的操作方法是什么

create table stu(id int primary key,name varchar(50),classId int,foreign key(classId) references class(classId));

MySQL數據庫約束的操作方法是什么

這個是外鍵約束的語法。

外鍵約束的含義時,stu表中的classId必須在class表中是存在的。

MySQL數據庫約束的操作方法是什么

當我們插入class存在的classid為001的數據可以成功插入。

MySQL數據庫約束的操作方法是什么

當我們插入的classId在class中不存在時,就會插入失敗。

MySQL數據庫約束的操作方法是什么

此處起到約束的class表是"父表(parent)",被約束的表叫做"子表(child).

實則不然,我們子表對父表也產生了一定的約束。

MySQL數據庫約束的操作方法是什么

我們可以發現,無法刪除外鍵約束的父表。

這也很好理解,如果父表刪除了,子表的數據去哪里參考,如果想刪除,可以先刪除子表,在刪除父表。

MySQL數據庫約束的操作方法是什么

我們可以發現當父表相應列不是主鍵時,無法建立外鍵約束,這是為什么呢?

因為每次再給子表插入時,都會先在父表先查詢這個id是否存在,如果表的數據十分大時,效率十分地低,要使用索引。

要想創建外鍵,就要求父類相應的列,有primary 或者 unique約束

到此,相信大家對“MySQL數據庫約束的操作方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

崇礼县| 霍邱县| 瑞安市| 塔河县| 聂荣县| 新源县| 东兰县| 奉新县| 高雄县| 宜章县| 同江市| 临高县| 子长县| 缙云县| 宝鸡市| 武安市| 民县| 长宁县| 高唐县| 安义县| 万宁市| 贵定县| 西宁市| 榆中县| 新沂市| 安庆市| 辉南县| 新河县| 红桥区| 蓝田县| 赫章县| 安阳县| 海门市| 昂仁县| 兰溪市| 西贡区| 民县| 丹东市| 工布江达县| 浦江县| 和政县|