SQL約束:數據完整性的守護者

在SQL中,約束(Constraints) 是作用于數據庫表字段上的規則,用于強制保證數據的完整性、準確性和一致性。當插入、更新或刪除數據時,約束會自動驗證操作是否符合規則,若違反則拒絕執行。

以下是SQL中常見的約束類型及其作用:


📌 1. PRIMARY KEY(主鍵約束)

  • 作用:唯一標識表中的每一條記錄(類似身份證號)。
  • 特點
    • 唯一性:值不可重復。
    • 非空性:值不可為 NULL
    • 一個表只能有一個主鍵(可由單列或多列組合)。
CREATE TABLE Users (id INT PRIMARY KEY,  -- 單列主鍵name VARCHAR(50)
);-- 多列組合主鍵
CREATE TABLE Orders (order_id INT,product_id INT,PRIMARY KEY (order_id, product_id)
);

📌 2. FOREIGN KEY(外鍵約束)

  • 作用:確保表間數據關聯的完整性(如訂單必須屬于存在的用戶)。
  • 特點
    • 指向另一張表的主鍵唯一鍵
    • 可定義級聯操作(如 ON DELETE CASCADE:主表刪除時,自動刪除從表關聯數據)。
CREATE TABLE Orders (order_id INT PRIMARY KEY,user_id INT,-- 關聯Users表的主鍵idFOREIGN KEY (user_id) REFERENCES Users(id)ON DELETE CASCADE  -- 用戶刪除時,其訂單自動刪除
);

📌 3. UNIQUE(唯一約束)

  • 作用:確保字段值在表內唯一(允許空值)。
  • 特點
    • 一個表可有多個唯一約束。
    • 與主鍵區別:允許 NULL(主鍵不允許)。
CREATE TABLE Employees (id INT PRIMARY KEY,email VARCHAR(100) UNIQUE  -- 郵箱必須唯一
);

📌 4. NOT NULL(非空約束)

  • 作用:強制字段不允許存入 NULL 值(必須提供有效數據)。
  • 常見場景:關鍵字段如姓名、訂單號等。
CREATE TABLE Products (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL  -- 產品名不能為空
);

📌 5. CHECK(檢查約束)

  • 作用:自定義條件校驗字段值(如年齡范圍、數值正負)。
CREATE TABLE Students (id INT PRIMARY KEY,age INT CHECK (age >= 18),  -- 年齡必須≥18grade CHAR(1) CHECK (grade IN ('A','B','C'))  -- 等級只能是A,B,C
);

📌 6. DEFAULT(默認值約束)

  • 作用:當插入數據未指定字段值時,自動填充預設值。
CREATE TABLE Orders (id INT PRIMARY KEY,order_date DATE DEFAULT CURRENT_DATE  -- 未指定日期時自動用當前日期
);

?? 約束的注意事項

  1. 命名約束:顯式命名便于維護(否則數據庫自動生成隨機名)。
    CREATE TABLE Users (id INT,CONSTRAINT pk_users PRIMARY KEY (id)  -- 命名主鍵約束
    );
    
  2. 修改約束:可通過 ALTER TABLE 增刪約束。
    ALTER TABLE Employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
    ALTER TABLE Employees DROP CONSTRAINT chk_salary;
    
  3. 性能影響:外鍵和唯一約束會自動創建索引,可能影響寫入速度,但提升查詢效率。

💡 應用場景示例

約束類型實際應用場景
PRIMARY KEY用戶ID、訂單號等唯一標識字段
FOREIGN KEY訂單關聯用戶ID、評論關聯文章ID
UNIQUE用戶郵箱、手機號等不可重復的業務字段
NOT NULL必填項(如用戶名、創建時間)
CHECK價格≥0、性別只能是’M’或’F’等邏輯校驗
DEFAULT自動填充創建時間、狀態默認值

合理使用約束可避免臟數據(如無效外鍵、重復訂單號),是數據庫設計的核心環節!

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

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

相關文章

Springboot-vue 地圖展現

在很多社區管理系統中,地圖展示功能是一個重要的模塊,它能直觀地呈現小區的地理位置分布。本文將詳細梳理從前端觸發請求到地圖上展示小區數據的完整流程,幫助大家理解前后端協同工作的具體細節。一、前端觸發:頁面加載與地圖初始…

Vue 3 登錄組件

Login.vue 組件詳細分析整體架構 Vue 3 登錄組件&#xff0c;采用 Composition API Element Plus UI 庫&#xff0c;實現了完整的用戶認證界面。 模板結構分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小結: getSpringFactoriesInstances從 `spring.factories` 文件中加載和實例化指定類型的類

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一個核心方法&#xff0c;用于從 spring.factories 文件中加載和實例化指定類型的類。這是 Spring Boot 實現自動配置和插件化擴展的關鍵機制。 1. 基本功能 該方法的主要作用是…

selenium SessionNotCreatedException問題解決辦法

在上周有一臺服務器重啟之后&#xff0c;Chrome瀏覽器也自動升了級&#xff0c;原本能夠正常使用的自動化辦公程序突然沒法用了&#xff0c;出現了下面的報錯提示。codes/addCancelBdld.py:980: DeprecationWarning: use options instead of chrome_optionsdriver webdriver.C…

SOAP HTTP Binding

SOAP HTTP Binding 引言 SOAP(Simple Object Access Protocol)是一種輕量級、簡單的協議,用于在網絡上交換結構化信息。它廣泛應用于Web服務中,用于實現不同系統和應用程序之間的通信。SOAP HTTP Binding是SOAP協議的一種實現方式,它允許使用HTTP協議來傳輸SOAP消息。本…

GPT-5免費使用教程(國內可訪問)

GPT-5來了&#xff0c;壓力給到各大AI模型廠商&#xff1f; 北京時間2025年8月7日&#xff0c;OpenAI 推出兩款開源模型 gpt-oss-120b / 20b&#xff0c;性能逼近 o4-mini/o3-mini&#xff0c;一時間火爆AI圈&#xff1b;但這好像只是一道開胃小菜&#xff0c;在北京時間2025年…

內存作假常見方案可行性分析

內存作假通常修改所涉及到的幾個文件&#xff1a;M sys/frameworks/base/core/java/android/app/ActivityManager.javaM sys/frameworks/base/core/jni/android_os_Debug.cppM sys/frameworks/base/core/jni/android_util_Process.cppM sys/frameworks/base/services/core/java…

C#(vs2015)利用unity實現彎管機仿真

以下是基于 Visual Studio 2015 和 Unity 實現彎管機仿真的完整技術流程&#xff0c;結合工業仿真開發的最佳實踐整理而成&#xff0c;涵蓋建模、通信、運動控制和交互邏輯等核心模塊&#xff1a;---一、環境配置與基礎框架搭建 1. Unity 與 VS2015 聯動 - 安裝 [Visual Studio…

華為USG防火墻雙機,但ISP只給了1個IP, 怎么辦?

華為USG防火墻雙機&#xff0c;但ISP只給了1個IP&#xff0c; 怎么辦&#xff1f; 華為USG雙機使用VRRP&#xff0c;需要3個Ip 本次聯通只給了 100.1.1.0/30 這一個互聯段 聯通側用了100.1.1.1&#xff0c; 我們這一側只有100.1.1.2 怎么辦&#xff1f; 找聯通多要幾個Ip&…

Go 工具鏈環境變量實戰:從“command not found”到工具全局可用的全流程復盤

在 Go 生態里&#xff0c;豐富的命令行工具極大提升了開發效率。但很多小伙伴第一次用 go install 安裝第三方工具后&#xff0c;卻遇到終端里找不到命令的尷尬——明明裝好了&#xff0c;終端卻報 “command not found”。這是為什么呢&#xff1f;本文結合我親身踩過的坑&…

MCU 軟件斷點注意事項!!!

——為什么調試器會在運行中改我的Flash程序&#xff1f;調試單片機時&#xff0c;很多人都有這樣的疑問&#xff1a;明明我在調試前刷進去的固件是好的&#xff0c;為什么加了一個斷點之后&#xff0c;調試器居然去改了 Flash&#xff1f; 如果我拔掉調試器&#xff0c;這個固…

騰訊iOA:數據安全的港灣

聲明&#xff1a;文章為本人真實測評&#xff0c;非廣告&#xff0c;無推廣&#xff0c;為用戶體驗文章 前言 當前網絡安全威脅日益復雜化&#xff0c;惡意軟件攻擊手段不斷升級。例如&#xff1a;釣魚郵件攜帶的偽裝安裝包可能引發勒索病毒在內網擴散&#xff0c;導致業務中斷…

相冊管理系統介紹

之前在github和gitee上了找了好久也沒找到符合自己需求的相冊管理系統&#xff0c;最近就靜下心來自己寫了一套。系統分為前臺相冊系統與后臺管理系統。 技術框架采用的是前端vueelementui&#xff0c;后端springbootmybatisplus。 下面是項目截圖&#xff1a;項目功能介紹&…

企業級高性能WEB服務器Nginx

nginx安裝 1.nginx編譯安裝 #在nginx官網獲取安裝包 [rootwebserver mnt]# wget https://nginx.org/download/nginx-1.24.0.tar.gz#解壓安裝包 [rootwebserver mnt]# tar zxf nginx-1.24.0.tar.gz [rootwebserver mnt]# cd nginx-1.24.0/#安裝編譯nginx需要的環境軟件 [rootw…

【Node.js從 0 到 1:入門實戰與項目驅動】1.3 Node.js 的應用場景(附案例與代碼實現)

文章目錄1.3 Node.js 的應用場景&#xff08;附案例與代碼實現&#xff09;1.3 Node.js 的應用場景&#xff08;附案例與代碼實現&#xff09;一、Web 服務器開發二、API 開發三、命令行工具&#xff08;CLI&#xff09;開發四、實時應用開發小結1.3 Node.js 的應用場景&#x…

No time to train! Training-Free Reference-Based Instance Segmentation之論文閱讀

摘要 圖像分割模型的性能歷來受到大規模標注數據收集成本高昂的制約。Segment Anything Model&#xff08;SAM&#xff09;通過一種可提示、與語義無關的分割范式緩解了這一根本問題&#xff0c;但在處理新圖像時&#xff0c;仍然需要手動提供視覺提示或依賴復雜的領域相關提示…

本地文件夾與 GitHub 遠程倉庫綁定并進行日常操作的完整命令流程

以下是將本地文件夾與 GitHub 遠程倉庫綁定并進行日常操作的完整命令流程&#xff0c;特別針對你的需求&#xff08;忽略數據集、偏好使用 rebase 保持主分支整潔&#xff09;進行了優化&#xff1a; 一、初始設置&#xff08;首次綁定&#xff09;在本地項目文件夾初始化 Git …

windows10 ubuntu 24.04 雙系統 安裝教程

準備windows安裝包解壓到u盤中作為啟動盤準備ubuntu安裝包https://ubuntu.com/download/desktop/thank-you?version24.04.3&architectureamd64<strue解壓到u盤中作為啟動盤準備磁盤分區安裝windows操作系統安裝disk geniusWindows 三個NTFS的分區System: windows操作系…

騰訊前端面試模擬詳解

以下是騰訊及騰訊音樂娛樂&#xff08;TME&#xff09;前端崗位高頻手撕題目詳解&#xff0c;結合真題及考察要點整理&#xff0c;覆蓋面試核心考點&#xff1a;?? 一、核心手撕題&#xff08;騰訊/TME 必考&#xff09; 1. Promise 并發控制&#xff08;90%場次出現&#xf…

微軟將于 10 月停止混合 Exchange 中的共享 EWS 訪問

使用 Exchange 混合部署的組織應為未來幾個月即將生效的新變化做好準備。微軟已宣布&#xff0c;自 2025 年 8 月起&#xff0c;將在某些混合環境中暫時阻止使用 Exchange Online 共享服務主體的 Exchange Web 服務 (EWS) 流量。 此項變更主要影響使用“豐富共存”功能的組織&a…