1. 程式人生 > >sql基礎知識-----主外來鍵、參照完整性

sql基礎知識-----主外來鍵、參照完整性

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">1.主鍵、外來鍵------參照完整性</span></span>

表A 的主鍵是表B 的中的欄位,這個欄位就是表B 的外來鍵,而參照完整性也是由此而來。

其實很好理解,字需要去建兩張表,按照上面的條件

<span style="font-size:18px;">CREATE TABLE Stores
(
	StoreCode char(4) NOT null primary key,
	Name varchar(40) not null ,
	Address varchar(40) null,
	City varchar(40) not null,
	State char(2) not null,
	zip char(5) not null
);
CREATE TABLE Sales
(
	OrderNumber varchar(20) not null,
	StoreCODE CHAR(4) NOT NULL FOREIGN KEY REFERENCES Stores(StoreCode),
	OrderDate date not null,
	Quantity int not null ,
	terms varchar(12) not null,
	TitleID int NOT NULL,
);

INSERT INTO Stores VALUES
('TEST ','TEST Store','1234 Anywhere street','here','NY','00319');

INSERT INTO Stores 
(StoreCode ,Name ,City ,State ,zip )
values 
('TET2','Test Store ','Here','NY ','00319');</span>
程式碼到這裡是沒錯的,可以執行!

但是可以發現,這兩個表有一列共同的資料,不僅僅是列名相同,連列中的資料也是相同的,那麼如果列中的資料不同會出現上面情況呢?下面我們來看一下:

<span style="font-size:18px;">INSERT INTO Sales 
values('TESTORDER','TET3',GETDATE(),10,'NET 30 ',1234567)</span>
我們向從表Sales 中在加入一行資料,發現報如下錯誤了:
<span style="font-size:18px;">訊息 547,級別 16,狀態 0,第 1 行
INSERT 語句與 FOREIGN KEY 約束"FK__Sales__StoreCODE__04E4BC85"衝突。該衝突發生於資料庫"DatabasePractice",表"dbo.Stores", column 'StoreCode'。
語句已終止。
</span>
這裡我們不難發現:因為主表Stores 中沒有我們新加的這一行資料中的此表的外來鍵,所以就報錯了,這就是資料的參照完整性。