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 宿舍表(楼号,宿舍号),