星期三, 6月 09, 2021

[SQL] Foreign Key - Insert

[SQL] Foreign Key - Delete 觀察 Delete 的影響,這篇筆記觀察 insert 時 FK 存在與否的影響
USE tempdb
GO 

----- 建立 tblOrders、tblCustomer Table
DROP TABLE IF EXISTS tblOrders
DROP TABLE IF EXISTS tblCustomer

CREATE TABLE tblOrders (
			OrderID int Primary Key identity(1,1) , 
			CustomerID int)
CREATE TABLE tblCustomers (
			CustomerID int Primary Key identity(1,1), 
			CustomerName nvarchar(50))

----- 建立 tblCustomers 資料
INSERT INTO tblCustomers (CustomerName) VALUES
	(N'客戶1') , (N'客戶2') , (N'客戶3') , (N'客戶4') , (N'客戶5')
    
----- 沒有 FK - insert 資料並觀察執行計畫
INSERT INTO tblOrders (CustomerID) VALUES(1)

----- 建立 tblOrders、tblCustomers 之間的 Foreign Key
ALTER TABLE [dbo].[tblOrders] WITH CHECK ADD CONSTRAINT [FK_tblOrders_tblCustomers] FOREIGN KEY(CustomerID)
REFERENCES [dbo].[tblCustomers] (CustomerID)

----- 存在 FK - insert 資料並觀察執行計畫
INSERT INTO tblOrders (CustomerID) VALUES(2)

沒有 FK 時

對 tblOrders insert 資料,就單純看見 [叢集索引插入]
 
[SQL] Foreign Key - Insert-2

存在 FK 時

可以觀察到對 tblOrders insert 資料,會另外發動 Index Seek 去 tblCustomer 內確認,並在 assert 判斷是否違反 FK

沒有留言:

張貼留言