sqlserver多主键问题

在一个表里创建两个及以上主键再创建别的表将前一个表里的主键引用做后一个表里的外键时 显示无法找到前一个表里相应的主键创建不成
但只设置一个主键时就没有问题

选取一个主键,其他列设置为唯一约束(UNIQUE)即可

CREATE TABLE table1 (
    id1 INT PRIMARY KEY,  -- 选取 id1 作为主键
    id2 INT UNIQUE        -- id2 设置唯一约束
)

CREATE TABLE table2 (
    ref_id INT REFERENCES table1(id1)  -- 外键引用 table1 的主键 id1
)

或者使用复合主键(主键由两个或多个列组合而成)

CREATE TABLE table1 (
    id1 INT, 
    id2 INT,
    CONSTRAINT PK_id PRIMARY KEY (id1, id2)  -- 复合主键(id1, id2)
)

CREATE TABLE table2 (
    id1 INT, 
    id2 INT,
    CONSTRAINT FK_id FOREIGN KEY (id1, id2) REFERENCES table1(id1, id2) 
)  

望采纳

如果你设置2个字段作为联合主键
那么外键也得是2个字段一一映射
不能外表一个字段去关联主表的2个字段

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7743118
  • 你也可以参考下这篇文章:在sqlserver中根据字段名查找字段所在的表
  • 除此之外, 这篇博客: sqlserver数据库练习5中的 2. 什么是数据库的完整性?简述关系模型的三个完整性规则,分别举例说明。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 指关系数据库的参照完整性,是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
    1、实体完整性:指关系的主键约束primary key,主键不能取空值,唯一;比如学生表的主键通常是取学号为主键
    2、参照完整性:指参照关系中每个元素的外码要么为空,要么等于被参照关系中某个元素的主码
    3、用户定义的完整性:指对关系中每个属性的取值作一个约束的具体定义。比如 性别属性只能取男或女“

  • 您还可以看一下 雷伟老师的SQLServer数据库基础课程中的 数据库表的管理(二)小节, 巩固相关知识点