最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解析MySQL中的約束

 更新時(shí)間:2025年10月23日 16:10:06   作者:凍咸魚  
約束是關(guān)系型數(shù)據(jù)庫的一個(gè)重要的功能,主要作用是保證數(shù)據(jù)的完整性,也可以理解為數(shù)據(jù)的正確性(數(shù)據(jù)本身是否正確,關(guān)聯(lián)關(guān)系是否正常),本文給大家介紹MySQL中的約束,感興趣的朋友一起看看吧

約束是關(guān)系型數(shù)據(jù)庫的一個(gè)重要的功能

主要作用是保證數(shù)據(jù)的完整性,也可以理解為數(shù)據(jù)的正確性(數(shù)據(jù)本身是否正確,關(guān)聯(lián)關(guān)系是否正常)

約束類型

類型說明
NOT NULL?空約束指定?空約束的列不能存儲(chǔ) NULL 值
DEFALUT 默認(rèn)約束當(dāng)沒有給列賦值時(shí)使?的默認(rèn)值
UNIQUE 唯?約束指定唯?約束的列每?數(shù)據(jù)必須有唯?的值
PRIMARY KEY 主鍵約束NOT NULL 和 UNIQUE的結(jié)合,可以指定?個(gè)列或多個(gè)列,有助于防?數(shù)據(jù) 重復(fù)和提?數(shù)據(jù)的查詢性能
FOREIGN KEY 外鍵約束外鍵約束是?種關(guān)系約束,?于定義兩個(gè)表之間的關(guān)聯(lián)關(guān)系,可以確保數(shù)據(jù)的完整性和?致性
CHECK 約束?于限制列或數(shù)據(jù)在數(shù)據(jù)庫表中的值,確保數(shù)據(jù)的準(zhǔn)確性和可靠性

注意:

  • UNIQUE 唯?約束 的字段NULL可以重復(fù)插入
  • PRIMARY KEY 主鍵約束 的列即使非空也是唯一的
  • 如果設(shè)置一個(gè)字段非空且唯一(id bigint not null unique)在desc查詢表結(jié)構(gòu)的時(shí)候會(huì)顯示id的key為PRI

一個(gè)表中不允許有兩個(gè)主鍵,但一個(gè)主鍵可以包含多個(gè)字段(復(fù)合主鍵)

FOREIGN KEY 外鍵約束 表中某個(gè)列的值要建立外鍵關(guān)系,這個(gè)值必須是另一張表的主鍵列,或是唯一約束列并且存在。

語法:foregin key (字段名) reference 主表(列);

create table student(
 id bigint PRIMARY KEY auto_increment, 
 name varchar(20) not null,
 age int DEFAULT 18,
 class_id bigint,
 foreign key (class_id) references class(id) # 創(chuàng)建外鍵約束
);

當(dāng)子表中存在對(duì)主表的依賴的時(shí)候,不能刪除主表中相應(yīng)的記錄,匯報(bào)一個(gè)主外鍵關(guān)系的錯(cuò)誤。如果要?jiǎng)h除主表中記錄要先刪除子表中記錄。

CHECK 約束可以應(yīng)?于?個(gè)或多個(gè)列,?于限制列中可接受的數(shù)據(jù)值,從?確保數(shù)據(jù)的完整性和準(zhǔn)確性。 在8.0.16開始全??持CHECK約束,之前的版本會(huì)忽略CHECK的定義

# 加?CHECK約束
create table student(
 id bigint PRIMARY KEY auto_increment, # 設(shè)置?增主鍵
 name varchar(20) not null,
 age int DEFAULT 18,
 gender char(1),
 check (age >= 16),
 check (gender = '男' or gender = '?')
);

自增類型

可以讓數(shù)據(jù)庫來維護(hù)主鍵的增長(zhǎng),在插入的時(shí)候先找最大值,然后在這個(gè)基礎(chǔ)上加1,生成一個(gè)新的值,做為一個(gè)新數(shù)據(jù)行的主鍵的值。

在設(shè)置了自增后,也可以指定一個(gè)主鍵值插入,只要不重復(fù)即可。

由于主鍵自增是在最大值的基礎(chǔ)上加1,那么主鍵值在數(shù)據(jù)表中可能是不連續(xù)的。

注意:正常寫入數(shù)據(jù)時(shí),主鍵自增。如果寫入數(shù)據(jù)的時(shí)候,由于某種原因報(bào)錯(cuò)了(主外鍵約束,語法…),也會(huì)生成一個(gè)主鍵值,但記錄不會(huì)成功寫入,這個(gè)主鍵值也會(huì)被視為已使用。下一次寫入數(shù)據(jù)時(shí),就會(huì)發(fā)現(xiàn)主鍵值不連續(xù)的現(xiàn)象

總結(jié)

  1. NOT NULL 非空約束,被指定 NOT NULL 的列,值不允許為空(必填)
  2. UNIQUE 唯一約束,這個(gè)列里的值在表中是唯一的,也就是說不能重復(fù)
  3. PRIMARY KEY 主鍵約束,可以看做是 NOT NULL 和 UNIQUE 的組合,可以用一個(gè) bigint 類型列為表單獨(dú)指定主鍵,同時(shí)也可以指定主鍵自增,用 auto_increment 關(guān)鍵字,自增操作時(shí),會(huì)找到當(dāng)前列中最大的值,然后在這個(gè)基礎(chǔ)上加 1(+1)
  4. DEFAULT 默認(rèn)約束,如果寫入一行記錄的時(shí)候,指定了默認(rèn)約束的列,如果在寫入數(shù)據(jù)時(shí)沒有指定一個(gè)確定的值就會(huì)用默認(rèn)值進(jìn)行填充該字段的值
  5. FOREIGN KEY 外鍵約束,一張表要與另一張表的主鍵或唯一鍵進(jìn)行關(guān)聯(lián),說明表與表之間的關(guān)聯(lián)關(guān)系

到此這篇關(guān)于MySQL中的約束詳解的文章就介紹到這了,更多相關(guān)mysql約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL數(shù)據(jù)表字段內(nèi)容的批量修改、清空、復(fù)制等更新命令

    MySQL數(shù)據(jù)表字段內(nèi)容的批量修改、清空、復(fù)制等更新命令

    MySQL數(shù)據(jù)表字段內(nèi)容的批量修改、清空、復(fù)制等更新命令,需要的朋友可以參考下。
    2011-08-08
  • Linux中安裝MySql 5.7.21的詳細(xì)操作步驟

    Linux中安裝MySql 5.7.21的詳細(xì)操作步驟

    這篇文章主要給大家介紹了關(guān)于在Linux中安裝MySql 5.7.21的詳細(xì)操作步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 詳解mysql建立索引的使用辦法及優(yōu)缺點(diǎn)分析

    詳解mysql建立索引的使用辦法及優(yōu)缺點(diǎn)分析

    索引是快速搜索的關(guān)鍵。MySQL索引的建立對(duì)于MySQL的高效運(yùn)行是很重要的。下面介紹mysql建立索引的優(yōu)缺點(diǎn)及常用使用方法。
    2016-07-07
  • MySQL Threads_running飆升與慢查詢的相關(guān)問題解決

    MySQL Threads_running飆升與慢查詢的相關(guān)問題解決

    這篇文章主要介紹了MySQL Threads_running飆升與慢查詢的問題解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-05-05
  • 安裝mysql出錯(cuò)”A Windows service with the name MySQL already exists.“如何解決

    安裝mysql出錯(cuò)”A Windows service with the name MySQL already exis

    這篇文章主要介紹了安裝mysql出錯(cuò)”A Windows service with the name MySQL already exists.“如何解決的相關(guān)資料,在日常項(xiàng)目中此問題比較多見,特此把解決辦法分享給大家,供大家參考
    2016-05-05
  • mysql update語句的用法詳解

    mysql update語句的用法詳解

    本文詳細(xì)介紹了,mysql中update語句的用法,系統(tǒng)全面的學(xué)習(xí)下update更新語句的用法,有需要的朋友可以參考下
    2014-08-08
  • MySQL錯(cuò)誤:Can‘t?connect?to?MySQL?server?on?localhost解決辦法(分多種情況)

    MySQL錯(cuò)誤:Can‘t?connect?to?MySQL?server?on?localhost解決辦法

    這篇文章主要給大家介紹了關(guān)于MySQL錯(cuò)誤:Can‘t?connect?to?MySQL?server?on?localhost的解決辦法,文中介紹的方法分多種情況,通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Mysql中常用的幾種join連接方式總結(jié)

    Mysql中常用的幾種join連接方式總結(jié)

    join語句是面試中經(jīng)常會(huì)讓你現(xiàn)場(chǎng)寫出來的語句,下面這篇文章主要給大家介紹了關(guān)于Mysql中常用的幾種join連接方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • MySQL5.7升級(jí)MySQL8.0的完整卸載與安裝及連接Navicat的步驟

    MySQL5.7升級(jí)MySQL8.0的完整卸載與安裝及連接Navicat的步驟

    因?yàn)橐粋€(gè)項(xiàng)目交接需要需要將mysql物理備份文件還原至MySQL5.7,并且將mysql5.7升級(jí)到MySQL8.0,下面這篇文章主要給大家介紹了關(guān)于MySQL5.7升級(jí)MySQL8.0的完整卸載與安裝及連接Navicat的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • mybatis中bind的使用示例詳解

    mybatis中bind的使用示例詳解

    在 MyBatis 中,bind?標(biāo)簽允許在 OGNL 表達(dá)式上下文中創(chuàng)建一個(gè)變量并將其綁定到當(dāng)前上下文,常用于動(dòng)態(tài) SQL 中簡(jiǎn)化復(fù)雜表達(dá)式或重復(fù)計(jì)算,這篇文章主要介紹了mybatis中bind的使用示例詳解,需要的朋友可以參考下
    2025-06-06

最新評(píng)論

玉林市| 衡阳县| 乐昌市| 石首市| 德钦县| 凉山| 安顺市| 无为县| 喀喇沁旗| 保康县| 宁夏| 陆川县| 印江| 三门县| 八宿县| 建昌县| 新和县| 阳山县| 海淀区| 磐石市| 黑龙江省| 江孜县| 怀远县| 驻马店市| 丁青县| 南雄市| 福清市| 怀仁县| 手游| 舒城县| 定边县| 勐海县| 蓝山县| 宝应县| 景德镇市| 天全县| 临武县| 高邑县| 于都县| 岫岩| 新津县|