SQL Server多個主鍵與外鍵、復合主鍵與外鍵引用


一、SQL查表語句執行機制

1、邏輯執行順序:從上到下,先有后走

2、否則報錯:"對象名無效"、"外鍵 'FK__學生表__6CD828CA' 引用了無效的表 '宿舍表'"

CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  foreign key(樓號) references 宿舍表(樓號),
);
CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  primary key(樓號),
);

3、解決方法:調整建表順序(先有主鍵,才可引用外鍵)

CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  primary key(樓號),
);
CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  foreign key(樓號) references 宿舍表(樓號),
);

 

二、1:1多個單一外鍵引用不同表單一主鍵

(1)例題:

Create table 圖書表(
  書號 nchar(6) primary key,
)
Create table 書店表(
  書店編號 nchar(6) primary key,
)
Create table 圖書銷售表(
  書號 nchar(6) not null,
  書店編號 nchar(6) not null,
  銷售日期 smalldatetime not null,
  primary key(書號,書店編號,銷售日期),
  foreign key(書號) references 圖書表(書號),
  foreign key(書店編號) references 書店表(書店編號)
)

(2)刪表:得先刪有引用外鍵約束的表

 

三、n:m復合外鍵引用同一表復合主鍵

(1)1:n不符合語法邏輯,報錯:在被引用表 '宿舍表' 中沒有與外鍵 'FK__學生表__樓號__793DFFAF' 中的引用列列表匹配的主鍵或候選鍵。

CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  primary key(樓號,宿舍號),
);
CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  foreign key(樓號) references 宿舍表(樓號),
  foreign key(宿舍號) references 宿舍表(宿舍號),
);

(2)解決方法:同一表復合外鍵對應引用同一表復合主鍵

CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  primary key(樓號,宿舍號),
);
CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  foreign key(樓號,宿舍號) references 宿舍表(樓號,宿舍號),

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM