SQL:Constraint(約束)

目錄

🎯 什么是 Constraint?

MySQL 中常見的約束類型:

1. PRIMARY KEY

2. FOREIGN KEY

3. UNIQUE

4. NOT NULL

5. DEFAULT

6. CHECK(MySQL 8.0+)

7. AUTO_INCREMENT

🎯 什么是 Constraint?

Constraint(約束) 是你在創建表時指定的一組規則,用于限制字段中允許的值,以防止無效、重復或不一致的數據寫入數據庫。

MySQL 中常見的約束類型:

約束類型作用描述
PRIMARY KEY標識表中唯一的記錄(不能重復,不能為 NULL)
FOREIGN KEY保證兩個表之間的引用一致性(建立關聯)
UNIQUE限制某列中的值不能重復
NOT NULL限制字段值不能為空
DEFAULT給字段設置默認值
CHECK限制字段值必須滿足指定的邏輯表達式(MySQL 8.0+ 才正式支持)
AUTO_INCREMENT自動生成唯一的整數(通常用于主鍵)

1. PRIMARY KEY

  • 用于唯一標識表中每一行記錄;

  • 通常只設置一個主鍵;

  • 自動包含 NOT NULLUNIQUE 約束。

CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(100)
);

2. FOREIGN KEY

  • 建立兩個表之間的聯系;

  • 確保外鍵列中的值在父表中必須存在。

CREATE TABLE courses (course_id INT PRIMARY KEY,course_name VARCHAR(100)
);CREATE TABLE enrollments (student_id INT,course_id INT,FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

3. UNIQUE

  • 限制某列中的值不能重復;

  • 不限制 NULL 值(NULL 不視為“重復”)。

CREATE TABLE users (user_id INT PRIMARY KEY,email VARCHAR(100) UNIQUE
);

4. NOT NULL

  • 防止列接受 NULL 值;

  • 常用于業務關鍵字段,如姓名、價格等。

CREATE TABLE products (product_id INT PRIMARY KEY,name VARCHAR(100) NOT NULL
);

5. DEFAULT

  • 如果插入時未指定該列的值,則自動填入默認值。

CREATE TABLE orders (order_id INT PRIMARY KEY,status VARCHAR(20) DEFAULT 'pending'
);

6. CHECK(MySQL 8.0+)

  • 驗證列值是否滿足條件;

  • 在舊版本中會忽略,不生效。

CREATE TABLE employees (emp_id INT PRIMARY KEY,age INT CHECK (age >= 18)
);

7. AUTO_INCREMENT

  • 自動為每一行生成唯一編號;

  • 常和主鍵一起使用。

CREATE TABLE customers (customer_id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
);

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

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

相關文章

數據庫數據恢復——sql server數據庫被加密怎么恢復數據?

SQL server數據庫數據故障: SQL server數據庫被加密,無法使用。 數據庫MDF、LDF、log日志文件名字被篡改。 數據庫備份被加密,文件名字被篡改。 SQL server數據庫數據恢復過程: 1、將所有數據庫做完整只讀備份。后續所有數據恢…

MySQL 用 limit 影響性能的優化方案

一.使用索引覆蓋掃描 如果我們只需要查詢部分字段,而不是所有字段,我們可以嘗試使用索引覆蓋掃描,也就是讓查詢所需的所有字段都在索引中,這樣就不需要再訪問數據頁,減少了隨機 I/O 操作。 例如,如果我們…

【算法筆記】并查集詳解

🚀 并查集(Union-Find)詳解:原理、實現與優化 并查集(Union-Find)是一種非常高效的數據結構,用于處理動態連通性問題,即判斷若干個元素是否屬于同一個集合,并支持集合合…

鴻蒙HarmonyOS埋點SDK,ClkLog適配鴻蒙埋點分析

ClkLog埋點分析系統,是一種全新的、開源的洞察方案,它能夠幫助您捕捉每一個關鍵數據點,確保您的決策基于最準確的用戶行為分析。技術人員可快速搭建私有的分析系統。 ClkLog鴻蒙埋點SDK通過手動埋點的方式實現HarmonyOS 原生應用的前端數據采…

JMeter的關聯

關聯:上一個請求的響應結果和下一個請求的數據有關系 xpath提取器 適用場景 HTML/XML文檔結構化數據: 適用于從HTML或XML文檔中提取結構化數據。例如,提取表格中的數據、列表中的項目等。示例:從HTML表格中提取所有行數據。 …

Spring Security 權限配置詳解

🌟Spring Security 權限配置詳解:從基礎到進階 Spring Security 是一個功能強大、可高度自定義的安全框架,主要用于為基于 Spring 的應用程序提供身份驗證和授權功能。 本篇文章將帶你深入理解 Spring Security 的權限配置機制,掌…

pycharm中安裝Charm-Crypto

一、安裝依賴 1、安裝gcc、make、perl sudo apt-get install gcc sudo apt-get install make sudo apt-get install perl #檢查版本 gcc -v make -v perl -v 2、安裝依賴庫m4、flex、bison(如果前面安裝過pypbc的話,應該已經裝過這些包了) sudo apt-get update sudo apt…

【MCAL】AUTOSAR架構下基于SPI通信的驅動模塊詳解-以TJA1145為例

目錄 前言 正文 1.TJA1145驅動代碼中的SPI協議設計 1.1 對SPI Driver的依賴 1.2 對SPI配置的依賴 1.2.1 SpiExternalDevice 1.2.2 Channel_x 1.2.3 Job_x 1.2.4 Sequence N 1.2.5 Sequence M 1.2.6 Sequence L 1.2.7 小結 2.基于Vector驅動代碼的SPI配置 2.1 SPI引…

JavaScript:BOM編程

今天我要介紹的是JS中有關于BOM編程的知識點內容:BOM編程; 介紹:BOM全名(Browser Object Model(瀏覽器對象模型))。 是瀏覽器提供的與瀏覽器窗口交互的接口,其核心對象是 window。與…

Memcached緩存系統:從部署到實戰應用指南

#作者:獵人 文章目錄 一、安裝libevent二、安裝配置memcached三、安裝Memcache的PHP擴展四、使用libmemcached的客戶端工具五、Nginx整合memcached:六、php將會話保存至memcached Memcached是一款開源、高性能、分布式內存對象緩存系統,可應用各種需要緩…

解決前后端時區不一致問題

前后端時區不一致導致: 》數據不顯示在前端 》頁面顯示時間有誤 》一些對時間有要求的方法,無法正確執行,出現null值,加上我們對null值有判斷/注解,程序就會報錯中斷,以為是業務邏輯問題,其實…

35.Java線程池(線程池概述、線程池的架構、線程池的種類與創建、線程池的底層原理、線程池的工作流程、線程池的拒絕策略、自定義線程池)

一、線程池概述 1、線程池的優勢 線程池是一種線程使用模式,線程過多會帶來調度開銷,進而影響緩存局部性和整體性能,而線程池維護著多個線程,等待著監督管理者分配可并發執行的任務,這避免了在處理短時間任務時創建與…

驅動開發硬核特訓 · Day 6 : 深入解析設備模型的數據流與匹配機制 —— 以 i.MX8M 與樹莓派為例的實戰對比

🔍 B站相應的視屏教程: 📌 內核:博文視頻 - 從靜態綁定驅動模型到現代設備模型 主題:深入解析設備模型的數據流與匹配機制 —— 以 i.MX8M 與樹莓派為例的實戰對比 在上一節中,我們從驅動框架的歷史演進出…

Blender安裝基礎使用教程

本博客記錄安裝Blender和基礎使用,可以按如下操作來繪制標靶場景、道路標識牌等。 目錄 1.安裝Blender 2.創建面板資源 步驟 1: 設置 Blender 場景 步驟 2: 創建一個平面 步驟 3: 將 PDF 轉換為圖像 步驟 4-方法1: 添加材質并貼圖 步驟4-方法2:創…

智能手機功耗測試

隨著智能手機發展,用戶體驗對手機的續航功耗要求越來越高。需要對手機進行功耗測試及分解優化,將手機的性能與功耗平衡。低功耗技術推動了手機的用戶體驗。手機功耗測試可以采用powermonitor或者NI儀表在功耗版上進行測試與優化。作為一個多功能的智能終端,手機的功耗組成極…

從代碼學習深度學習 - 多頭注意力 PyTorch 版

文章目錄 前言一、多頭注意力機制介紹1.1 工作原理1.2 優勢1.3 代碼實現概述二、代碼解析2.1 導入依賴序列掩碼函數2.2 掩碼 Softmax 函數2.3 縮放點積注意力2.4 張量轉換函數2.5 多頭注意力模塊2.6 測試代碼總結前言 在深度學習領域,注意力機制(Attention Mechanism)是自然…

學術版 GPT 網頁

學術版 GPT 網頁 1. 學術版 GPT 網頁非盈利版References https://academic.chatwithpaper.org/ 1. 學術版 GPT 網頁非盈利版 arXiv 全文翻譯,免費且無需登錄。 更換模型 System prompt: Serve me as a writing and programming assistant. 界面外觀 References …

MarkDown 輸出表格的方法

MarkDown用來輸出表格很簡單,比Word手搓表格簡單多了,而且方便修改。 MarkDown代碼: |A|B|C|D| |:-|-:|:-:|-| |1|b|c|d| |2|b|c|d| |3|b|c|d| |4|b|c|d| |5|b|c|d|顯示效果: ABCD1bcd2bcd3bcd4bcd5bcd A列強制左對齊&#xf…

MetaGPT深度解析:重塑AI協作開發的智能體框架實踐指南

一、框架架構與技術突破 1.1 系統架構設計 graph TBA[自然語言需求] --> B(需求解析引擎)B --> C{角色路由系統}C --> D[產品經理Agent]C --> E[架構師Agent]C --> F[工程師Agent]D --> G[PRD文檔]E --> H[架構圖]F --> I[代碼文件]G --> J[知識共…

自用:在使用SpringBoot做學生信息管理系統時遇到的問題

1、在做完查詢測試時&#xff0c;一直報出404找不到錯誤&#xff0c;原因是沒有為各個層的實現類添加注解 2、改完之后發現測試沒有數據&#xff0c;是因為我寫的返回值類型為空&#xff0c;應該返回一個List< Student > 3、我沒有想到要寫Result實體類&#xff0c;因為不…