SQL的約束

来源:https://www.cnblogs.com/TeaTracing/archive/2022/06/18/16388269.html
-Advertisement-
Play Games

SQL的約束 概述 概念:約束是作用於表中欄位上的規則,用於限制存儲表中的數據; 目的:保證資料庫中數據的正確性、有效性、完整性; 常見的約束分類: 約束 描述 關鍵字 非空約束 限制該欄位的數據不能為null not null 唯一約束 保證該欄位的所有數據都是唯一的、不重覆的 unique 主鍵 ...


SQL的約束


  • 概述

    1. 概念:約束是作用於表中欄位上的規則,用於限制存儲表中的數據;

    2. 目的:保證資料庫中數據的正確性、有效性、完整性;

    3. 常見的約束分類:

      約束 描述 關鍵字
      非空約束 限制該欄位的數據不能為null not null
      唯一約束 保證該欄位的所有數據都是唯一的、不重覆的 unique
      主鍵約束 主鍵是一行數據的唯一標識,要求非空且唯一 primary key
      預設約束 保存數據時,如果未指定該欄位的值,則採用預設值 default '預設值'
      檢查約束 保證欄位滿足某一個條件 check (條件1 && 條件2)
      外鍵約束 用來兩張表之間建立連接,保證數據的一致性、完整性 foreign key

      (PS:檢查約束僅在MySQL8.0.16版本之後;約束是作用於表中欄位上的,可以在創建表、修改表的時候添加;)

外鍵約束


  • 外鍵約束 - 語法

    1. 添加外鍵:

      create table 表名(
      	欄位名 數據類型,
          ...
          [constraint] [外鍵名稱] foreign key(外鍵欄位名) references 主表(主表列名)
      );
      
      alter table 表名 add constraint 外鍵名稱_表名_欄位名 foreign key (需要的外鍵欄位名) references 主表(主表列名);
      
    2. 刪除外鍵:

      alter table 表名 drop foreign key 外鍵名稱_表名_欄位名;
      
    3. 刪除、更新行為:

      alter table 表名 add constraint 外鍵名稱_表名_欄位名 foreign key (外鍵欄位) references 主表名(主表欄位名) on update 更新時行為 on delete 刪除時行為;
      
  • 外鍵約束 - 刪除、更新行為

    行為 說明
    no action 當在父表中刪除、更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除、更新。
    restrict 當在父表中刪除、更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除、更新。
    cascade 當在父表中刪除、更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則刪除、更新外鍵在子表中的記錄。
    set null 當在父表中刪除對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則設置子表中該外鍵值為null。
    set default 父表有變更時,子表將外鍵列設置成一個預設的值

    (PS:set null的要求取決於外鍵允許設置null;set default在MySQL中的lnnodb不支持;)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Air105 有 1 個 Timer 單元,包含 8 個獨立定時器: Timer0 到 Time7, 8 個定時器中斷源獨立,每個定時器單獨占 1 個中斷源, 使用 PCLK 時鐘頻率作為定時器計時鐘源, 定時器採用向下計數方式. 每個 Timer 單元定時器都支持 PWM 模式, PWM 模式最高... ...
  • #一、防火牆配置 前言:電腦的防火牆配置保證了別的主機無法訪問本機非開放埠 1、防火牆介紹 Linux預設防火牆是開啟的,而且所以的埠對外都是不可訪問的,該策略保證了電腦的安全 但同時也帶來了問題如:其他電腦無法訪問本機上項目開啟的埠號 在Linux上安裝Tomcat,Tomcat軟體需 ...
  • 一、功能變數名稱系統概述 功能變數名稱系統DNS(Domain Name System)是網際網路使用的命名系統,用來把便於人們使用的機器名字轉換成為IP地址。功能變數名稱系統其實就是名字系統。為什麼不叫“名字”而叫“功能變數名稱”呢?這是因為在這種網際網路的命名系統中使用了許多的“域(domain)”,因此就出現了“功能變數名稱”這個名詞。 ...
  • vmstat 是一個查看虛擬記憶體(Virtual Memory)使用狀況的工具,但是怎樣通過 vmstat 來發現系統中的瓶頸呢? 1。 使用vmstat 使用前我們先看下命令介紹及參數定義 Usage: vmstat [options] [delay [count]] Options: -a, - ...
  • Air105 的時鐘 高頻振蕩源 * 晶元支持使用內部振蕩源, 或使用外置12MHz晶體 * 晶元上電覆位後 ROM boot 啟動過程基於內部12MHz的振蕩器 * 晶元內部集成的12MHz振蕩源精度為±2%, 精度一般 * 使用外置12MHz晶體, 需要軟體切換 * 經過PLL倍頻後為系統提供... ...
  • 寫在前面 前些天看了一本漫畫,裡面一個老技術人員的話,讓我不自覺的想到很多東西。 是啊,有時候我們自認為的自我實現,其實就是在湊這個時代的熱鬧,每個時代都有自己的熱鬧,個人之於時代不過是浪花一朵朵。 但這並不能作為我們不去湊這個熱鬧的理由,你去湊時代的這個熱鬧,這個時代必會給予你獎勵,或早或晚,或大 ...
  • 1、Linux常用命令 1.1、Linux命令初體驗 在日常使用過程當中經常使用到的命令有如下幾種 命令 對應英文 作用 ls [目錄名] list 查看當前目錄下的內容 pwd print work directory 查看當前所在目錄 cd [目錄名] change directory 切換目錄 ...
  • 導讀: 本文主要介紹了快手的精排模型實踐,包括快手的推薦系統,以及結合快手業務展開的各種模型實戰和探索,全文圍繞以下幾大方面展開: 快手推薦系統 CTR模型——PPNet 多domain多任務學習框架 短期行為序列建模 長期行為序列建模 千億特征,萬億參數模型 總結和展望 -- 01 快手推薦系統 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...