一、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 宿舍表(樓號,宿舍號),