MySQL-表的約束

文章目錄

  • 一、空屬性
  • 二、默認值
  • 三、zerofill
  • 四、列描述
  • 五、主鍵
    • 刪除主鍵
    • 追加主鍵
    • 復合主鍵
    • 根據主鍵快速索引
  • 六、自增長
    • last_insert_id()
  • 七、唯一鍵
  • 八、外鍵
    • class表(主表)
    • student表(從表)


一、空屬性

在這里插入圖片描述
之前我們將表的機構,使用desc table_name查看表的結構的時候,我們并沒有說明Null這一欄代表的什么意思,現在我們就來詳細講解一下。

試想一種場景,我們要統計一個班上的人員信息,我們就需要創建一個表,這個表需要保存學生的姓名,學號,地址等信息。 以實際需求來講,我們在插入表的時候,這里的姓名和學號是一定不能為空的,所以為了約束程序員在對表插入信息的行為,就可以使用添加是否允許一個字段的數據可以被設置為NULL。

那么怎么才能約束這種空屬性的行為呢?

我們只需要在創建表的時候對字段添加上 not null 就可以約束該字段不允許為NULL。
在這里插入圖片描述

在這里插入圖片描述
可以看到,對設置的not null的字段強行設置為null時,數據庫是會給我們報錯的!

所以可以通過設置null空屬性來對我們表插入的一種約束!

二、默認值

在這里插入圖片描述
直接教用法:

在這里插入圖片描述

然后插入數據
在這里插入圖片描述
可以看到,我們設置的字段如果帶有default默認值,在插入時如果忽略這個字段,會默認根據我們的設置的default默認值來填充這個字段。


三、zerofill

剛開始學習數據庫時,很多人對數字類型后面的長度很迷茫。

mysql> show create table tt3\G
***************** 1. row *****************
Table: tt3
Create Table: CREATE TABLE tt3 (
a int(10) unsigned DEFAULT NULL,
b int(10) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

int(N)中的(N)如果沒有攜帶zerofill就沒有意義了,那么它的作用是什么呢?

  • 一旦添加了zerofill,該數字類型就會變成unsigned,所以也就不能再設置為負數。
  • 我們使用select查詢表中的內容時,可以發現,如果你輸入的數字少于N位,輸出的時候就會用0來填補位數;如果你輸入的位數大于N位,就不會有任何影響。

四、列描述

列描述–comment之前我們就已經接觸過了。
在這里插入圖片描述
comment更像是一種注釋的行為,也算是一種約束。

五、主鍵

主鍵:primary key用來唯一的約束該字段里面的數據,不能重復,不能為空,一張表中最多只能有一個主鍵。 主鍵所在的列通常是整數類型。

例如下面我們要創建一個student表,要以學生的學號作為主鍵。

方法1在這里插入圖片描述
方法2在這里插入圖片描述

在插入的時候,作為主鍵的字段不允許插入重復的數據,否則會報錯。在這里插入圖片描述

刪除主鍵

當創建好了一個表,并且創建表的時候就設置好了主鍵,如果又想刪除這個字段的主鍵性質,應該怎么辦?

在這里插入圖片描述

追加主鍵

當有一個表,這個表沒有主鍵,現在想讓一個字段追加主鍵性質,應該怎么辦?
在這里插入圖片描述

復合主鍵

在這里插入圖片描述
上面不是說 一張表中最多只能有一個主鍵嗎? 為什么這里有兩個主鍵?
這里的主鍵其實也只是一個,只不過這個表的主鍵添加到了兩列上。

復合主鍵所帶來的就是 在插入數據的時候,只要被設為主鍵的字段不同時存在相同的數據,就不會報錯。
在這里插入圖片描述
這里就是只要id和phone_num不同時都重復,插入就不會有問題,只有一個重復是沒有關系的。

根據主鍵快速索引

在這里插入圖片描述

六、自增長

auto_increment:當對應的字段,不給值,會自動的被系統觸發,系統會從當前字段中已經有的最大值+1操作,得到一個新的不同的值。通常和主鍵搭配使用,作為邏輯主鍵。

  • 任何一個字段要做自增長,前提是本身是一個索引(key一欄有值)
  • 自增長字段必須是整數
  • 一張表最多只能有一個自增長

在這里插入圖片描述
在這里插入圖片描述
我們再調用show create table student \G;
在這里插入圖片描述
可以看到這里是有一個AUTO_INCREMENT=22來控制這種自增長的。

last_insert_id()

LAST_INSERT_ID() 是 MySQL 中的一個函數,它用于獲取最近一次使用 AUTO_INCREMENT 字段的 INSERT 或 UPDATE 語句生成的 ID 值。這個函數非常有用,特別是在你插入數據到包含自增主鍵的表中,并希望立即獲取這個新生成的主鍵值的時候。
在這里插入圖片描述

七、唯一鍵

一張表中有往往有很多字段需要唯一性,數據不能重復,但是一張表中只能有一個主鍵。 唯一鍵就可以解決表中有多個字段需要唯一性約束的問題。

那么唯一鍵跟主鍵有什么區別呢?
主鍵更多的是標識唯一性的。而唯一鍵更多的是保證在業務上,不要和別的信息出現重復。(其實也就是哲學意義不同)

在這里插入圖片描述
對一個字段設置唯一鍵屬性,可以用unique也可以用unique key。
我們還可以看到,primary key是默認帶有not null屬性的,unique key是不默認帶有not null屬性的。

在這里插入圖片描述

八、外鍵

外鍵用于定義主表和從表之間的關系:外鍵約束主要定義在從表上,主表則必須是有主鍵約束或unique約束。當定義外鍵后,要求外鍵列數據必須在主表的主鍵列存在或為null。

這里我們舉一個例子就是主表為class,它有班級編號和班級名稱;從表為student,它有學生的所屬班級和學生的個人信息。 這里我們就可以讓student表的所屬班級與class表的班級編號相關聯。

class表(主表)

在這里插入圖片描述
在這里插入圖片描述

student表(從表)

在這里插入圖片描述
在這里插入圖片描述
當從表student在向class_id插入1,2,3時都是非常順利地插入進去的,但是當插入4的時候就報錯了,這是因為我們的主表class只有1,2,3三個class_id,沒有4這個班級編號,所以當從表student在插入4時才會報錯,這就說明了這兩個表已經建立了約束關系。

那如果我的主表想刪除一行怎么辦?
在這里插入圖片描述
可以看到,如果我們想要刪除主表中class_id=1的一行數據,數據庫是不讓我刪的,這是因為我們的從表student也已經有對應的外鍵class_id=1,如果想要主表刪除class_id=1這一數據行,首先就要刪除所有從表外鍵class_id=1的數據行。

在這里插入圖片描述
這也說明 主表和從表因為外鍵是互相約束的。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45093.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單例模式java

并發的有序性會導致返回空指針 class A{private static volatil A a;private A(){}public A getInstance(){if(anull){synchronized(A.class){if(anull)anew A();}}return a; }anew A();這條語句,他需要:開辟空間,初始化空間,指針…

python熱門面試題三

面試題1:Python中的列表推導式是什么?請給出一個例子。 回答: 列表推導式(List Comprehension)是Python中一種非常強大且簡潔的構建列表的工具。它允許你通過一個表達式來創建一個新的列表,這個表達式定義…

無顯卡也可以玩大模型-MiniGPT-4篇

MiniGPT-4學習 1.Colab上部署MiniGPT-42.論文摘要3.模型架構4.模型訓練5.總結 1.Colab上部署MiniGPT-4 代碼: https://github.com/Czi24/Awesome-MLLM-LLM-Colab/blob/master/MLLM/MiniGPT-4-colab/MiniGPT-4.md 2.論文摘要 最近的 GPT-4 展示了非凡的多模式能力&…

【設計模式之美】【建造型】工廠模式:通過面向接口編程思路,串起業務流程

文章目錄 一. 簡單工廠(Simple Factory)第一種簡單工廠:面向接口編程與工廠類:劃分功能職責第二種:單例簡單工廠:節省內存和對象創建的時間 二. 工廠方法(Factory Method)&#xff1…

文心一言:如何備考軟考架構師

提問:軟考高級:架構師指導,有哪些考點、重點考點有哪些?需要如何備考?案例分析題如何做?論文如何寫? 文心一言回答1700字如下: 針對軟考高級架構師的考試,以下是對考點、重點考點、備…

DiffusionModel-Transformer知識回顧

論文鏈接: Attention Is All You Need CNN vs RNN vs Transformer CNN(卷積神經網絡) 特點: 局部連接:每個卷積神經元只與輸入數據的局部區域連接,這有助于捕捉局部特征。權重共享:卷積核的權重…

Android筆記:Constructor (xxx) has been changed after generation.

遇到此報錯時,onstructor (xxx) has been changed after generation.是因為修改了實體類字段后什么都不修改的話就會報這個錯 這條信息是關于代碼生成和代碼變更的警告。當你使用某些工具(如注解處理器、代碼生成庫等)來自動生成代碼時&…

運行在Linux上的程序越來越慢的排查思路

1、通過free -h 排查內存使用情況,是否內存滿了 2、通過df -h 排查磁盤的使用情況,磁盤是否沒有空間了 3、檢查系統資源配置情況,比如使用ulimit -a檢查當前會話的資源限制,如最大文件數、打開文件描述符數等,看是否…

清華計算幾何-ConvexHull(凸包)-求極點InTriangle/ToLeft Test

ConvexHull(凸包) 凸包是什么 凸包是計算幾何一個非常基礎核心的概念。我理解的凸包就是給定一個點集合, 最外圍的點的包圍體就是凸包。如下所示: 極點(ExtremityPoint) 給定的點集合中, 如果一個點存在一條直線, 讓其他所有點都在于該直線的同一側, 則該點為極點。 非極點 …

如何理解electron 的預加載腳本

在 Electron 應用中,預加載腳本(Preload Script)是一個非常重要的概念,它允許你在渲染進程(web 頁面)和主進程之間創建一個安全的橋梁。預加載腳本運行在 Node.js 環境中,但位于渲染進程的一個單獨的上下文中,這意味著它可以訪問 Node.js 的 API,但無法直接訪問 DOM。…

JavaScript進階(7) ----構造函數和原型對象

目錄 構造函數 prototype 定義: 使用場景: constructor 使用場景: 原型proto 原型鏈 定義 特點 instanceof 運算符 原型繼承的基本概念 在JavaScript中,構造函數和原型是面向對象編程的核心概念,它們共同構…

海康工業相機驅動

1.新建基于對話框的MFC程序,界面布局如下 2.修改控件ID,為控件綁定變量 3.創建全局變量,構造函數中初始化變量,初始化對話框界面,補齊各控件按鈕響應函數 全文程序如下: // MFC_GrabimageDlg.h : 頭文件 /…

【動態規劃Ⅰ】斐波那契、爬樓梯、楊輝三角

動態規劃—斐波那契系列 什么是動態規劃斐波那契數組相關題目509. 斐波那契數 Easy1137. 第 N 個泰波那契數 Easy 楊輝三角118. 楊輝三角 Easy 爬樓梯相關題目70. 爬樓梯 Easy746. 使用最小花費爬樓梯 Easy 什么是動態規劃 動態規劃是一種通過將原問題分解為相對簡單的子問題來…

linux下解壓命令

在Linux下,解壓縮文件通常涉及多種命令,具體取決于文件的壓縮格式。以下是一些常用的解壓縮命令: tar.gz / .tgz 如果文件擴展名為 .tar.gz 或 .tgz,你可以使用 tar 命令來解壓縮: tar -xzf filename.tar.gz這里的 -x …

近期幾首小詩匯總-生活~卷

生活 為生活飄零,風雨都不阻 路見盲人艱,為她心點燈 賀中科大家長論壇成立十五周年 科學家園有喜賀 園外丑漢翹望中 曾一學子入我科 正育科二盼長大 憧憬也能入此家 與科學家論短長 園外翹首聽高論 發現有隙入此壇 竟然也能注冊成 入園瀏覽惶然立 此貼…

系統架構的基礎:定義、原則與發展歷程

目錄 1. 系統架構的定義 2. 系統架構的基本組成部分 2.1 架構層次 2.2 架構視圖 2.3 架構原則 3. 系統架構的發展歷程 3.1 初期階段:單體架構(Monolithic Architecture) 3.2 面向對象和組件化階段 3.3 客戶端-服務器架構(Client-Server Architecture) 3.4 三層架…

在 Linux 上使用 lspci 命令查看 PCI 總線硬件設備信息

lspci 命令用于顯示 Linux 系統上的設備和驅動程序 當在個人電腦或服務器上運行 Linux 時,有時需要識別該系統中的硬件。lspci 命令用于顯示連接到 PCI 總線的所有設備,從而滿足上述需求。該命令由 pciutils 包提供,可用于各種基于 Linux 和…

JAVA中的回溯算法解空間樹,八皇后問題以及騎士游歷問題超詳解

1.回溯算法的概念 回溯算法顧名思義就是有回溯的算法 回溯算法實際上一個類似枚舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。回溯法是一種選優搜索法&#xff…

E12.【C語言】練習:求兩個數的最大公約數

1.枚舉 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int a 0;int b 0;int tmp 0;scanf("%d %d", &a, &b);if (a < b){for (int i1; i < a; i){if (0a% i && 0b%i)tmp i;}}if (a>b){for (int i 1; i <…

[線性RNN系列] Mamba: S4史詩級升級

前言 iclr24終于可以在openreview上看預印本了 這篇&#xff08;可能是顛覆之作&#xff09;文風一眼c re組出品&#xff1b;效果實在太驚艷了&#xff0c;實驗相當完善&#xff0c;忍不住寫一篇解讀分享分享。 TL;DR &#xff08;overview&#xff09; Structured State-Sp…