SQL FOREIGN KEY 約束- 保障表之間關系完整性的關鍵規則

SQL FOREIGN KEY 約束

SQL FOREIGN KEY 約束用于防止破壞表之間關系的操作。FOREIGN KEY 是一張表中的字段(或字段集合),它引用另一張表中的主鍵。具有外鍵的表稱為子表,具有主鍵的表稱為被引用表或父表。

以下是兩個表的例子:

Persons 表

PersonID  LastName  FirstName  Age
1          Hansen      Ola          30
2          Svendson  Tove      23
3          Pettersen  Kari      20

Orders 表

OrderID  OrderNumber  PersonID
1      77895      3
2      44678      3
3      22456      2
4      24562      1

注意,“Orders” 表中的 “PersonID” 列指向 “Persons” 表中的 “PersonID” 列。“Persons” 表中的 “PersonID” 列是 “Persons” 表中的主鍵。“Orders” 表中的 “PersonID” 列是 “Orders” 表中的外鍵。

FOREIGN KEY 約束防止將無效數據插入到外鍵列中,因為它必須是父表中包含的值之一。

在 CREATE TABLE 時使用 SQL FOREIGN KEY

以下 SQL 在創建 “Orders” 表時在 “PersonID” 列上創建了一個 FOREIGN KEY

對于 MySQL:

CREATE TABLE Orders (OrderID int NOT NULL,OrderNumber int NOT NULL,PersonID int,PRIMARY KEY (OrderID),FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

對于 SQL Server / Oracle / MS Access:

CREATE TABLE Orders (OrderID int NOT NULL PRIMARY KEY,OrderNumber int NOT NULL,PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

要允許對 FOREIGN KEY 約束進行命名,并在多列上定義 FOREIGN KEY 約束,請使用以下 SQL 語法:

對于 MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders (OrderID int NOT NULL,OrderNumber int NOT NULL,PersonID int,PRIMARY KEY (OrderID),CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)REFERENCES Persons(PersonID)
);

在 ALTER TABLE 時使用 SQL FOREIGN KEY

要在表已經創建的情況下在 “PersonID” 列上創建 FOREIGN KEY 約束,請使用以下 SQL:

對于 MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

要允許對 FOREIGN KEY 約束進行命名,并在多列上定義 FOREIGN KEY 約束,請使用以下 SQL 語法:

對于 MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

刪除 FOREIGN KEY 約束

要刪除 FOREIGN KEY 約束,請使用以下 SQL:

對于 MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

對于 SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

通過這些 SQL 語句,您可以在數據庫中定義和管理 FOREIGN KEY 約束,以確保表之間的關系得到維護。

SQL CHECK 約束

SQL CHECK 約束用于限制可以放入列中的值范圍。如果在列上定義了 CHECK 約束,它將僅允許為該列指定某些值。如果在表上定義了 CHECK 約束,它可以基于行中其他列的值來限制某些列中的值。

在 CREATE TABLE 時使用 SQL CHECK

以下 SQL 在創建 “Persons” 表時在 “Age” 列上創建了一個 CHECK 約束。CHECK 約束確保一個人的年齡必須是 18 歲或以上:

對于 MySQL:

CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,CHECK (Age>=18)
);

對于 SQL Server / Oracle / MS Access:

CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int CHECK (Age>=18)
);

要允許對 CHECK 約束進行命名,并在多列上定義 CHECK 約束,請使用以下 SQL 語法:

對于 MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,City varchar(255),CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);

在 ALTER TABLE 時使用 SQL CHECK

要在表已經創建的情況下在 “Age” 列上創建 CHECK 約束,請使用以下 SQL:

對于 MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CHECK (Age>=18);

要允許對 CHECK 約束進行命名,并在多列上定義 CHECK 約束,請使用以下 SQL 語法:

對于 MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');

刪除 CHECK 約束

要刪除 CHECK 約束,請使用以下 SQL:

對于 SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;

對于 MySQL:

ALTER TABLE Persons
DROP CHECK CHK_PersonAge;

通過這些 SQL 語句,您可以在數據庫中定義和管理 CHECK 約束,以確保列中的值滿足指定的條件。

SQL DEFAULT 約束

SQL DEFAULT 約束用于為列設置默認值。如果沒有指定其他值,將在所有新記錄中添加默認值。

在 CREATE TABLE 時使用 SQL DEFAULT

以下 SQL 在創建 “Persons” 表時為 “City” 列設置了 DEFAULT 值:

對于 MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,City varchar(255) DEFAULT 'Sandnes'
);

DEFAULT 約束還可以用于通過使用諸如 GETDATE() 之類的函數插入系統值:

CREATE TABLE Orders (ID int NOT NULL,OrderNumber int NOT NULL,OrderDate date DEFAULT GETDATE()
);

在 ALTER TABLE 時使用 SQL DEFAULT

要在表已經創建的情況下在 “City” 列上創建 DEFAULT 約束,請使用以下 SQL:

對于 MySQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';

對于 SQL Server:

ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;

對于 MS Access:

ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';

對于 Oracle:

ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';

刪除 DEFAULT 約束

要刪除 DEFAULT 約束,請使用以下 SQL:

對于 MySQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT;

對于 SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

對于 SQL Server:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;

通過這些 SQL 語句,您可以在數據庫中為列設置默認值,確保在插入新記錄時,如果未提供值,將使用指定的默認值。

最后

為了方便其他設備和平臺的小伙伴觀看往期文章:

微信公眾號搜索:Let us Coding,關注后即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關注

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

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

相關文章

dll動態鏈接庫【C#】

1說明: 在C#中,dll是添加 【類庫】生成的。 2添加C#的dll: (1)在VS中新建一個Windows應用程序項目,并命名為TransferDll。 (2)打開Windows窗體設計器,從工具箱中為窗體…

Unity 性能優化的手段【更新中】

目錄 對象池 減少Draw Calls 批處理 合并網格 貼圖集 LOD 基本原理 應用 優點 挑戰 LightMap 基本概念 如何工作 優點 缺點 對象池 使用對象池:頻繁地創建和銷毀對象會導致性能下降和內存碎片化。對象池可以預先創建一些對象,然后在需要時…

【數據開發】Hive 多表join中的條件過濾與指定分區

1、條件過濾 left join 中 on 后面加條件 where 和 and 的區別 1、 on條件是在生成臨時表時使用的條件,它不管and中的條件是否為真,都會保留左邊表中的全部記錄。2、where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有le…

Gemini:新一代AI產品的驚人功能和革命性影響

目錄 1 前言2 視頻分析與交互能力3 策劃推理能力4 教育領域的應用能力5 科學領域的論文解讀能力6 結語 1 前言 Google最新推出的AI產品Gemini引發了廣泛關注,其30分鐘的介紹和演示視頻展示了令人驚艷的功能。Gemini以其驚人的藝術創作能力脫穎而出,通過…

TCP一對一聊天

客戶端 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io…

python-04(入門基礎篇4——lists相關的部分語法)

python-04(入門基礎篇4——lists相關的部分語法) 1. 前言1.1 python入門1.2 參考官網 2. 關于索引和切片3. 在列表追加元素3.1 支持拼接3.2 使用list.append() 方法在列表末尾添加新項 4. 列表是可變類型4.1 更改其中某元素內容4.2 使用切片更改列表大小…

cesium學習記錄

有段時間自學了cesium,這里記錄一下自學過程,希望在所需之時查閱~~ 1、cesium源碼獲取與Index頁面介紹 官網網址 www.cesiumjs.org 源代碼下載:Platform-Dowmloads 在index.html右擊open with Live server開啟本地服務 點擊Documentation…

mysql 表分區類型

在MySQL中,有幾種不同類型的分區可以用于對表進行分區。以下是MySQL中常用的分區類型: 1. RANGE分區:基于給定的列范圍進行分區。例如,可以按照日期范圍或數值范圍對表進行分區。 CREATE TABLE sales (id INT NOT NULL AUTO_INC…

VMware安裝OpenEuler(安裝界面)

本文中使用的OpenEuler版本:22.03 LTS SP2 VMware:17.0.0 一、下載鏡像 根據CPU和場景,按需下載 https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP2 二、初始化VmWare 三、配置操作系統 四、安裝操作系統 …

Nginx漏洞修復

1、漏洞 去掉在請求響應頭中存在的信息 Server: nginx X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1;modeblock 修復方法 在Nginx的配置文件中的 server 標簽內增加一下配置 server_tokens off; add_header X-Frame-Options SAMEORIGIN; …

Python繪制幾種常見的時序分析圖

時間序列數據是一種按照時間順序排列的觀測值集合,每個觀測值對應于一個特定的時間點。這種數據在許多領域中都具有重要的應用價值,如金融、經濟、氣候科學等。通過分析時間序列數據,可以幫助我們掌握潛在的模式、發現趨勢和季節性波動等重要…

【力扣】160.相交鏈表

160.相交鏈表 這個題目因為我之前在學指針的時候沒學好,所以總感覺有一種畏難,我害怕。但是當真正的開始學習之后,發現現在的腦袋還是能用的,所以不要放棄,你可以的! 題解: 總的來說還是挺簡…

CSGO游戲盲盒開箱源碼 盲盒對戰、幸運開箱、積分商城、Fl盲盒

源碼介紹: CSGO游戲盲盒開箱源碼 盲盒對戰、幸運開箱、積分商城、Fl盲盒。這個是一個新花樣玩法的盲盒程序。 僅供學習,請勿商用!請購買正版程序運營。 代碼下載:百度網盤

2、Linux_遠程操作

遠程操作 1.配置ifconfig 1.1輸入 ifconfig 查看 ip 的命令( ifconfig ) 1.2搜索 ifconfig 命令(yum search ifconfig) 1.3配置網卡 進入如下目錄配置網卡 cd /etc/syscofig/network-scripts編輯 ifcfg-ens33 vi ifcfg-ens33按 i 鍵進入編輯模式 按 …

Java第二十一章

一.網絡程序設計基礎 1.網絡協議 網絡協議規定了計算機之間連接的物理、機械(網線與網卡的連接規定)、電氣(有效的電平范圍)等特征,計算機之間的相互尋址規則,數據發送沖突的解決方式,長數據如何分段傳送與接收等內容.就像不同的國家有不同的…

邏輯漏洞與越權

邏輯漏洞與越權 越權 如果使用A用戶的權限去操作B用戶的數據,A的權限小于B的權限,如果能夠成功操作,則稱之為越權操作。 越權漏洞形成的原因是后臺使用了 不合理的權限校驗規則導致的。 一般越權漏洞容易出現在權限頁面(需要登…

掌握VUE中localStorage的使用

文章目錄 🍁localStorage的使用🌿設置數據🌿獲取數據🌿更新數據🌿刪除數據 🍁代碼示例🍁使用場景🍁總結 localStorage是一種Web瀏覽器提供的本地存儲機制,允許開發者在用…

java中ReentrantLock的實現原理是什么?

ReentrantLock 的實現原理主要涉及到兩個關鍵概念:同步器(Sync)和 AQS(AbstractQueuedSynchronizer,抽象隊列同步器)。 ReentrantLock 使用 AQS 來實現可重入鎖的機制。AQS 是 Java 并發包中的一個抽象基類…

周星馳 互聯網3.0 團隊下個月將上線獨立 App

2023年12月7日,新浪科技報道指出,周星馳旗下的互聯網3.0團隊透露,Moonbox,這家周星馳創立的互聯網3.0初創公司,計劃在明年1月份完成Moonbox App的上線,屆時該應用將免費向用戶提供服務。 目前,…

C現代方法(第25章)筆記——國際化特性

文章目錄 第25章 國際化特性25.1 <locale.h>: 本地化25.1.1 類項25.1.2 setlocale函數25.1.3 localeconv函數 25.2 多字節字符和寬字符25.2.1 多字節字符25.2.2 寬字符25.2.3 Unicode和通用字符集25.2.4 Unicode編碼25.2.5 多字節/寬字符轉換函數25.2.6 多字節/寬字符串轉…