MySQL數據庫的約束

MySQL對于數據庫存儲的數據, 做出一些限制性要求, 就叫做數據庫的"約束".

在每一列的 列名, 類型 后面加上"約束".

一. not null (非空)

指定某列不能存儲null值.

二. unique (唯一)

保證這一列的每行必須有唯一值.

我們可以看到, 給 table 的 sn 列插入兩次 77 , 結果就會出現報錯:"Duplicate entry(重復的條目)".

三. default (默認值)

default 用于指定默認值.

如上圖, id 的默認值為null, 而由于我們手動給name指定了默認值, 所以name列的默認值是"無名".

四. primary key (主鍵)

primary key 主鍵: 約定了這個表的某個列為"身份標識".

從上圖我們可以看到, id 被指定為primary key.?

主鍵的性質:

(1) 非空性: 被指定為主鍵的列不能為空(null), 數據表的每條記錄都必須有一個主鍵值.

(2) 唯一性: 被指定為主鍵的列的值必須是唯一的, 不能有重復.(每條記錄的主鍵列都是不同的值).?

主鍵(primary key)既有非空性(not null), 又有不可變性(unique). primary key = not null + unique.

(3) 不可變性: 一旦某個記錄的主鍵被設定, 它就不能更改.

(4) 復合主鍵: 雖然通常只指定一個列為主鍵, 但是MySQL也支持使用多個列組合作為主鍵

(5) 自增主鍵: auto_increment,?被設置為自增主鍵的列,當你向表中插入新記錄時,不需要為這個列指定值,MySQL會自動為它生成一個值. (注意: 自增主鍵只能針對像int, bigint這樣的整數 指定).

(6) 作為索引: 被指定為主鍵的列會自動創建唯一縮索引, 有助于快速檢索表中的記錄.

五. foreign key (外鍵)

外鍵(foreign key)是一種用于建立兩個表之間關系的約束。它確保了表中的某個列的值必須存在于另一個表的主鍵或唯一鍵字段, 外鍵通常用于將多個表連接在一起.

(注意: 數據表中的列我們又稱為字段)

例如:

我們在這里往student表里插入數據時, 給classid列插入的值就必須是在class表中存在的.

如上圖所示, 往student表中插入class中存在的數據, 都沒問題. 但是如果插入在class中沒有的數據, 就會報錯. 這就是主鍵的作用.?

關于外鍵的一些關鍵點:

1. 關聯性: 子表的外鍵必須與父表中相應的主鍵或唯一鍵字段類型相匹配。

2. 相互約束: 父表約束了子表, 子表也會對父表進行反向約束. (例如: 如果父表中的某個記錄被子表引用了, 此時就不能刪除/修改父表中相應的記錄了). 解決方案:?在創建外鍵約束時,可以指定?ON DELETE CASCADE?或?ON UPDATE CASCADE?選項,這樣當父表中的記錄被刪除或更新時,子表中的相關記錄也會自動被刪除或更新。

所以, 在刪除表的時候, 我們要確保先刪除子表, 再刪除父表. 否則父表無法刪除.

先刪父表 --> 無法正常刪除.

先刪子表 -->正常刪除

以上就是本篇博客的全部內容啦,如果喜歡小編的文章,可以點贊,評論,收藏~

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

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

相關文章

【微服務】docker部署redis,一主二從三哨兵,讀寫分離

配置redis讀寫分離 3臺虛擬機 創建目錄用于掛載 mkdir -p /root/redis/{conf,data,logs} #master配置文件 bind 0.0.0.0 //任何ip都能訪問 port 6379 //redis端口號 logfile "/data/redis.log" //日志文件存放位置,啟動redis之前設置為空&#xff…

prometheus docker部署

1.安裝Docker sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors":["https://hub-mirror.c.163.com"] } EOF export DOWNLOAD_URL"https://hub-mirror.163.com/docker-ce" curl -fsSL https://ge…

TypeScript 中的聲明合并

1. 聲明合并的概念 聲明合并是指當 TypeScript 遇到多個同名的聲明時&#xff0c;會將它們合并為一個單一的聲明。這使得開發者可以分散地定義同一個實體的不同部分&#xff0c;最終將它們合并為一個整體。在進行聲明合并時&#xff0c;TypeScript 會根據不同類型的聲明進行不…

【LIN】STM32新能源汽車LIN通信實現過程

【LIN】STM32新能源汽車LIN通信實現過程 文章目錄 前言一、軟件二、接線圖三、硬件原理圖四、上位機五、PICO示波器串行解碼1.軟件中的LIN波特率設置-192002.PIC設置3.PIC串行解碼 六.引用總結 前言 【電機控制】直流有刷電機、無刷電機匯總——持續更新 使用工具&#xff1a;…

godot.bk

1.搜索godot國內鏡像&#xff0c;直接安裝&#xff0c;mono是csharp版本 2.直接解壓&#xff0c;50m&#xff0c;無需安裝&#xff0c;直接運行 3.godot里分為場景&#xff0c;節點 主場景用control場景&#xff0c;下面掛textureact放背景圖片&#xff0c;右鍵實例化子場景把…

961題庫 北航計算機 計算機網絡 附答案 簡答題形式

有題目和答案&#xff0c;沒有解析&#xff0c;不懂的題問大模型即可&#xff0c;無償分享。 第1組 習題 某網絡拓撲如題下圖所示&#xff0c;其中 R 為路由器&#xff0c;主機 H1&#xff5e;H4 的 IP 地址配置以及 R 的各接口 IP 地址配置如圖中所示。現有若干以太網交換機…

Python高效遍歷文件和目錄的方法

在 Python 中&#xff0c;遍歷文件和目錄可以使用 os、pathlib 等模塊。以下是一些高效遍歷文件和目錄的方法&#xff1a; 使用 os.walk() os.walk() 是一個高效的遞歸遍歷指定目錄及其子目錄的方法&#xff0c;它返回一個生成器&#xff0c;生成一個三元組 (root, dirs, fil…

Instruction-Tuningpromote tuning原理,對比區別

Instruction-Tuning 原理 Instruction-Tuning&#xff08;指令調優&#xff09;是一種通過對模型提供明確指令或任務描述&#xff0c;從而提升其在特定任務上的表現的技術。這種方法通過預先定義好的任務說明&#xff08;instructions&#xff09;對模型進行微調&#xff0c;使…

鴻蒙應用開發之OpenGL應用和X組件9

接著下來,我們來分析函數CreateProgram的實現,它是實現著色器程序的編譯、加載和刪除資源。 GLuint EGLCore::CreateProgram(const char *vertexShader, const char *fragShader) { if ((nullptr == vertexShader) || (nullptr == fragShader)) { OH_LOG_Print(L…

MySQL—函數—函數小結

一、引言 前面博客我們已經學完了MySQL的函數&#xff0c;下面快速的對MySQL的函數做一個小結。 在講解了MySQL的函數的時候&#xff0c;主要有四個方面&#xff1a; 1、字符串函數 &#xff08;1&#xff09;CONCAT&#xff1a;字符串連接 &#xff08;2&#xff09;LOWER、…

Java 多線程創建:三種主要方法

多線程編程是Java中一個重要的技術點&#xff0c;它允許程序并行執行多個任務&#xff0c;從而提高程序的執行效率。本文將詳細介紹在Java中創建多線程的三種主要方法&#xff1a;繼承Thread類、實現Runnable接口以及使用Callable和Future接口。 1. 繼承 Thread 類 繼承Threa…

【前端每日基礎】day34——HTTP和HTTPS

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是互聯網通信協議&#xff0c;用于在Web瀏覽器和Web服務器之間傳輸數據。以下是對HTTP和HTTPS的詳細介紹&#xff1a; HTTP&#xff08;Hypertext…

Ubuntu server 24 (Linux) IPtables 雙網卡 共享上網NAT 安裝配置DHCP

一 開啟路由轉發功能 sudo vim /etc/sysctl.conf net.ipv4.ip_forward1 sudo sysctl -p 二 安裝DHCP #更新軟件包列表&#xff1a; sudo apt update #安裝DHCP服務器 sudo apt install isc-dhcp-server #修改監聽網卡,根據實際修改 sudo vi /etc/default/isc-dhcp-server …

配置 HTTP 代理 (HTTP proxy)

配置 HTTP 代理 [HTTP proxy] 1. Proxies2. curl2.1. Environment2.2. Proxy protocol prefixes 3. Use an HTTP proxy (使用 HTTP 代理)3.1. Using the examples (使用示例)3.1.1. Linux or macOS3.1.2. Windows Command Prompt 3.2. Authenticating to a proxy (向代理進行身…

Tailwindcss Layout布局相關樣式及實戰案例,5萬字長文,附完整源碼和效果截圖

aspect 相關樣式類 基礎樣式 ClassPropertiesaspect-autoaspect-ratio: auto;aspect-squareaspect-ratio: 1 / 1;aspect-videoaspect-ratio: 16 / 9; 案例&#xff1a;引入B站視頻 Use the aspect-* utilities to set the desired aspect ratio of an element. 使用’ asp…

兩款 IntelliJ IDEA 的 AI 編程插件

介紹兩款 IntelliJ IDEA 的 AI 編程插件&#xff1a;通義靈碼和 CodeGeeX。 通義靈碼 這是由阿里推出的一個基于通義大模型的 AI 編碼助手。 它提供了代碼智能生成、研發智能問答等功能。通義靈碼經過海量優秀開源代碼數據訓練&#xff0c;可以根據當前代碼文件及跨文件的上下…

kafka-偏移量圖解

生產者偏移量&#xff1a;生產者發送消息時寫入到哪個位置&#xff08;主題的每個分區會存儲一個 leo 即將寫入消息的偏移量&#xff09;&#xff0c;每次寫完消息 leo 會 1 消費者偏移量&#xff1a;消費者從哪個位置開始消費消息&#xff0c;小于等于 leo&#xff0c;每個組…

數據賦能(107)——體系:數據采集——概述、關注焦點

概述 數據采集是指利用特定設備或技術&#xff0c;從原始數據源中捕獲和記錄數據的過程。 數據采集的主要目的是為了獲取特定目標或現象的相關信息&#xff0c;以支持后續的數據分析、決策制定、業務優化等過程。 數據采集的重要性在于為企業和組織提供了關鍵的信息基礎&…

【Qt】對話框

文章目錄 1 :peach:對話框介紹:peach:2 :peach:對話框的分類:peach:2.1 :apple:模態對話框:apple:2.2 :apple:非模態對話框:apple:2.3 :apple:混合屬性對話框:apple: 3 :peach:Qt 內置對話框:peach:3.1 :apple:消息對話框 QMessageBox:apple: 1 &#x1f351;對話框介紹&#x…

如何配置Oracle的ACL權限

配置Oracle的ACL&#xff08;訪問控制列表&#xff09;權限是一個涉及多個步驟的過程。以下是一個清晰的步驟指南&#xff0c;用于配置Oracle的ACL權限&#xff1a; 1. 創建ACL 使用DBMS_NETWORK_ACL_ADMIN.CREATE_ACL過程來創建一個新的ACL。 sql BEGIN DBMS_NETWORK_ACL_…