国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 數據庫約束

這篇具有很好參考價值的文章主要介紹了MySQL 數據庫約束。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

目錄

一、數據庫約束?

1、約束類型

二、NULL 約束

三、unique 約束

四、default 約束

五、primary key 約束

自增主鍵

六、foreign key 外鍵約束

七、check 約束


一、數據庫約束?

我們使用數據庫來存儲數據,一般是希望這里存儲的數據是靠譜的,那么如何來保證數據是否靠譜呢?

那么MySQL就提供了一些機制,輔助我們自動的依賴程序,對數據進行檢查,這類檢查數據的機制,就是“約束”,一旦把約束確定好了,MySQL就會自動的對修改的數據做出檢查,看看你此處的這個數據是否靠譜,如果不靠譜,不滿足約束,就會直接報錯。

1、約束類型

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)


二、NULL 約束

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

YES 表示這兩列允許為空,因此可以向表中插入null

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

那么現在我們重新創(chuàng)建一個 student 表,并加入 not nul 約束,再來看看結果

注意:not null 是對 列名 進行的一個約束,是給列名來指定的,寫到列后面

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?此時我們會發(fā)現,id 可以為 null ,但是 name 不能為 null,那么現在,我們嘗試插入一個name 為 null 的數據又會發(fā)生什么呢?

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?此時,會給我們一個明顯的提示: name 這一列不能為 null

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

當 name 不為null 的時候,便可以正常插入數據了


三、unique 約束

不允許存在兩行數據,再這個指定列上重復

此處的限制不能重復,指的是,指定列,不同行之間

同一行 不同列之間 或者? 不同行 不同列之間 可以重復

和 not null 類似,unique 也是放在后面

我們現在,重新創(chuàng)建一個student表

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

那么此時,是可以插入重復的數據的

現在,我們再重新創(chuàng)建一個表

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)?此時會發(fā)現在表的結構中,出現了一個UNI 的標志,它是unique 的前三個首字母,代表了唯一

當我們往表中插入兩個編號一樣的學生的時候,就會發(fā)生報錯

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?針對帶有unique 約束的數據,在插入記錄的時候,就會先進行查詢,看看結果是否以及存在,存在才插入,不存在則不會進行插入。同理,修改也是一樣的


四、default 約束

規(guī)定沒有給列賦值時的默認值

我們先重新創(chuàng)建一個student 表

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

然后對其進行指定列插入

?MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

使用指定列插入的時候,未被指定的列就會按照默認值來進行填充,其中如果我們不修改默認值,那么默認情況下的默認值就是NULL

?那么如何修改這個默認值呢?

只需要在創(chuàng)建表的時候在后面加上default 默認值便可

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?所以,此時,我們能看到defult 那一欄中name 所對應的默認值 便是 ‘未命名’

插入數據的時候,大多數情況下,都還是需要手動指定插入值的,使用默認值,會讓代碼看起來沒有那么的直觀。

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

比如這個代碼,和‘未命名’三個字沒有任何的關聯,但是數據庫的內容 的確包含 ‘未命名’?


五、primary key 約束

主鍵約束,主鍵就是一條數據的身份標識

通過這個約束,來指定某個列作為主鍵

1、非空

2、不能重復

一個表,只能有一個主鍵?

?同樣的,我們重新創(chuàng)建一個 student 表,此時,讓id 成為主鍵

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?此時,我們再爛看看這個表的屬性就能發(fā)現,id 在NULL 這一欄是不能為空的,Key這一欄中的PRI 是primary 的縮寫,這個時候,id 便被我們標記成了主鍵

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

此時,我們再插入兩條一樣的數據,或者插入了 id 為 NULL 的數據就會發(fā)生報錯。?

那么現在,我們來嘗試創(chuàng)建一個有兩個主鍵的表:

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?此時,它就會提示我們當前的主鍵已經被多次定義

因此,主鍵只能有一個,但是一個主鍵可以對應一個列或者多個列

主鍵,往往是一個 整數 類型的 Id,要求不能重復

自增主鍵

允許客戶端,再插入數據的時候,不手動指定主鍵的值,而是交給MySQL自行分配,確保分配出來的這個主鍵的值,是和之前不重復的

那么現在我們來看一下這個自增主鍵是怎么樣進行使用的

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?其中 auto_increment 的意思就是 自動增加

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

此時,這個主鍵就變成了自增主鍵,并且auto_increment 必須搭配整數類型的主鍵使用?

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?注意:這樣的插入操作是OK的

這是因為,此時的 id 列是自增主鍵,設置成NULL 是讓數據庫自行分配一個 id

?MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

這時,我們能看到剛才的 id 是1?

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

當我們再插入兩條數據之后, id 依舊會按照自增的方式自行分配

自增主鍵 也是可以手動指定值的

?MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

那么如果下次再插入數據? 按照NULL 讓數據庫自己分配的方式 此時新的記錄是 4 還是 11 呢?

?MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?很明顯,答案是11

那么這個 id 咋分配的呢?

MySQL 會記錄當前 id 中的最大值,下一個分配的 id 就會在之前的最大值的基礎上,繼續(xù)自增

?MySQL 是會維護這樣的最大值的

如果MySQL 是一個單個節(jié)點的系統,基于上述策略,沒有啥問題

如果MySQL 是一個分布式系統,此時,自增主鍵就無法保證唯一性?

(每個主機上的MySQL只知道自己這個主機上存儲的最大值,不知道其它節(jié)點的情況)

對于分布式系統下,要想分配這種表示唯一性的id,就不能依賴MySQL 的自增主鍵了

?為了解決上述問題,也有很多分布式 id 的生成算法

核心公式:

目標是為了保證系統中每個節(jié)點 生成的id 都是唯一的

把 id 作為一個字符串,這個字符串由下列幾個部分拼接而成:

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)


六、foreign key 外鍵約束

?涉及到兩個表之間的約束

我們將約束別人的表稱為: 父表

將被別人約束的表稱為: 子表

我們先創(chuàng)建一個class 表,并向其中插入幾條數據:

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)? ? ?再創(chuàng)建一個student 表來完成一個外鍵約束

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)?

在這個代碼中,需要明確交代,誰(哪個表的哪一列)?要受到 誰 (哪個表的哪一列)的約束?

?創(chuàng)建外鍵約束的時候,是修改子表的代碼,父表的代碼是不受影響的

1、進行插入或者修改子表中受約束的這一列數據,就需要確保 插入/修改 后的結果 在父表中存在

(針對這種帶有外鍵約束的 插入/修改 就會觸發(fā)查找操作,在父表中進行查詢)

2、刪除/修改 父表中的記錄,就要看看這個記錄是否在子表中被使用了,如果被使用了,則不能進行刪除或者修改? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

3、刪除父表之前必須要先刪除子表

4、primary key 和 unique 這兩個約束自帶索引,沒有索引就不能建立外鍵

?現在我們來考慮一下下面這個場景:

?MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

?那么在上述場景中,如何實現商品下架這個功能呢?

針對這樣的場景,我們一般使用邏輯刪除

MySQL 數據庫約束,Mysql,數據庫,mysql,sql,database,數據庫開發(fā)

如果要實現商品下架,直接 update 把商品表中的 ok 改成 0.

實現獲取商品列表,就在select 的時候加個條件 and ok = 1? ?


七、check 約束

寫一個具體的條件表達式,當前的記錄符合條件就可以進行 插入/修改? ,不符合條件就失敗

對于MySQL5 來說,check 并不支持,寫上不會報錯,但是并沒用什么用文章來源地址http://www.zghlxwxcb.cn/news/detail-606305.html

到了這里,關于MySQL 數據庫約束的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 「MySQL」數據庫約束

    「MySQL」數據庫約束

    ?? 個人主頁 :Ice_Sugar_7 ?? 所屬專欄 :數據庫 ?? 歡迎點贊收藏加關注哦! 所謂約束,就是在創(chuàng)建表時給這個表 指定一些規(guī)則 ,后續(xù)插入、修改、刪除操作都要遵循這些規(guī)則 引入規(guī)則是為了進行更強的數據校驗 NOT NULL - 指示某列不能存儲 NULL 值 UNIQUE - 保證某列的每行必

    2024年03月27日
    瀏覽(60)
  • MySQL 數據庫約束

    MySQL 數據庫約束

    目錄 一、數據庫約束? 1、約束類型 二、NULL 約束 三、unique 約束 四、default 約束 五、primary key 約束 自增主鍵 六、foreign key 外鍵約束 七、check 約束 我們使用數據庫來存儲數據,一般是希望這里存儲的數據是靠譜的,那么如何來保證數據是否靠譜呢? 那么MySQL就提供了一些機

    2024年02月15日
    瀏覽(23)
  • MySQL數據庫,數據的約束

    MySQL數據庫,數據的約束

    目錄 1.數據的約束 1.1約束的類型 1.2NULL約束 1.3UNIQUE約束 1.4DEFAULT約束 1.5PRIMARY KEY約束 1.6FOREIGN KEY約束 首先,創(chuàng)建一個名為test的數據庫: 下方的所有測試表,都是在這個test數據庫中進行創(chuàng)建的。 NOT NULL - 指定某列不得為NULL(空) UNIQUE - 唯一值,每一列的值都是不同的 DEFAULT -

    2023年04月20日
    瀏覽(45)
  • MySQL創(chuàng)建數據庫(CREATE DATABASE語句)

    ?在 MySQL 中,可以使用? CREATE DATABASE ?語句創(chuàng)建數據庫,語法格式如下: [ ] 中的內容是可選的。語法說明如下: 數據庫名: 創(chuàng)建數據庫的名稱。MySQL 的數據存儲區(qū)將以目錄方式表示 MySQL 數據庫,因此數據庫名稱必須符合操作系統的文件夾命名規(guī)則,不能以數字開頭,盡量

    2024年02月04日
    瀏覽(33)
  • MySQL數據庫 12:約束

    MySQL數據庫 12:約束

    在MySQL中, 約束是一種限制數據表中列值的規(guī)定 。保證數據庫中的數據正確,有效性和完整性。MySQL中的約束有以下幾種: 1. 主鍵約束(Primary Key Constraint) :主鍵是用于唯一標識表中每行記錄的列。主鍵約束要求 每個主鍵列的值都是唯一的,且不能為NULL 。一個表只能有一

    2024年02月08日
    瀏覽(23)
  • 【MySQL】數據庫的約束

    【MySQL】數據庫的約束

    哈嘍,大家好!我是保護小周?,本期為大家?guī)淼氖?MySQL 數據庫中對表的約束, 主要有null (空約束),unique(唯一約束),primary key(主鍵約束),default(默認值約束), forelgn key(外鍵約束),check(檢查約束),超多實例講解,通俗易懂。 更多相關知識敬請期待:保護小周? *★,°*:

    2023年04月09日
    瀏覽(22)
  • MySQL:數據庫的約束

    MySQL:數據庫的約束

    目錄 1.數據庫約束 1.1 非空:not null 1.2 唯一:unique ????????????????1.3 默認值:default 1.4 列描述:comment 1.5?主鍵約束:primary key 1.6?外鍵約束 1.7 綜合案例 2.插入查詢結果 3.聚合函數 4.group by(分組查詢) 關系型數據庫的一個重要功能,就是需要保證數據的完整性

    2024年02月05日
    瀏覽(18)
  • 【MySQL數據庫 | 第十二篇】:約束

    【MySQL數據庫 | 第十二篇】:約束

    在MySQL中, 約束是一種限制數據表中列值的規(guī)定 。保證數據庫中的數據正確,有效性和完整性。MySQL中的約束有以下幾種: 1. 主鍵約束(Primary Key Constraint) :主鍵是用于唯一標識表中每行記錄的列。主鍵約束要求 每個主鍵列的值都是唯一的,且不能為NULL 。一個表只能有一

    2024年02月08日
    瀏覽(18)
  • 【數據庫】MySQL數據約束和表關系詳解

    【數據庫】MySQL數據約束和表關系詳解

    目錄 1.數據庫約束 1.1約束類型 1.2NULL約束 1.3UNIQUE:唯一約束 1.4DEFAULT:默認值約束 1.5PRIMARY:主鍵約束 1.6FOREIGH KEY:外鍵約束 2.表的關系 2.1一對一 2.2一對多 2.3多對多 數據庫中的數據保存在數據表中,在表中為了更加準確的存儲數據,保證數據的正確有效,可以在創(chuàng)建表的時候

    2024年02月04日
    瀏覽(21)
  • MySQL數據庫:數據庫的約束以及數據的聚合、聯合查詢

    MySQL數據庫:數據庫的約束以及數據的聚合、聯合查詢

    目錄 一.關系模型的簡要概述 二.數據庫的約束? 2.1約束類型 ? ? ? ??2.2NULL約束 2.3?UNIQUE:唯一約束 2.4 默認約束 2.5 PRIMARY KEY:主鍵約束 2.6 FOREIGN KEY:外鍵約束 2.7 CHECK約束 三.高效率查詢 3.1高效率查詢的分類 3.2聚合查詢 3.2.1聚合函數 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.聯合查詢

    2024年02月10日
    瀏覽(50)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包