很多时候我们在数据库设计中都会遇到这样的问题:

有两个表 ,例如(红色的是主键)

学生(学号,姓名,性别,专业号,班级号)

student(sno,sname,sex,spno,class_no);

专业(专业号,专业名称,上课学时);

department(spno,sname,semester);

班级:(专业号,班级号,班主任);

class(spno,class_no,header);

这个时候,我们想把student表里面的class_no设为外键,references  class表,这个时候应该怎么做呢?

我一开始的做法是:

alter  table student

add constraint  fr_student foreign key(class_no)   references  class(class_no);

会出现什么问题呢?

消息 1776,级别 16,状态 0,第 1 行
在被引用表 'class' 中没有与外键 'fr_student' 中的引用列列表匹配的主键或候选键。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。

会报错!

为什么呢?

这个时候我们就好好好理解一下定义了!

什么是外码,外码设置有什么条件?

其中有一点很重要的就是:外码必须是另外一个表的主码!

这里,我们的student表中的class_no如果想要设计成为一个外码,我们首先要找一下,它是哪一个表的主码?

class表?

class表中的主码是(spno,class_no);这个才是class的主码,是联合主键!

所以,果你设置联合主键,那么外键必须同时引用两个主键属性,否则只能用check约束来实现参照关系。

所以,一般这个时候你可以回去看看语意有没有理解错误,我的一开始就是因为语意理解错误了,才会出这种情况,我的student表中的(spno,class_no)应该设置成为外键才对。

写的不好的可以告诉我一下,让我修改一下

转载于:https://www.cnblogs.com/qq84435/p/3664855.html

SQL 中联合主键设为外键的问题相关推荐

  1. sql中的主键和外键

    主键 主键的定义 主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY 约束来 ...

  2. SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束

    什么是约束? 数据库-由若干张数据表组成(理解为一个类库) 数据表-由行和列组成的一个二维数组(理解为一个类) 列-字段(理解为表中对象的一个属性) 行-理解为表中的一个对象 约束是数据库中保证数据完 ...

  3. MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  4. mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  5. day 06 非空约束、唯一约束、主键约束、外键约束

      由于sql语句不区分大小写,为了书写方便,本文所有命令统一使用小写  往期内容 day 01 初识Mysql以及DDL数据定义语言  day 02 DML数据操作语言​​​​​​ day 03 D ...

  6. 数据库的主键表和外键表

    想写这个是因为自己刚好在尝试建一个数据库,而数据库的各个表之间的关系不是很清楚,没有形成一个整体的关系,所以就尝试着将数据库形成一个整理的关系表,我 敢说很多跟我一样的同学原来做课程设计,肯定就是随便 ...

  7. oracle 外键子查询,外键、联合查询、子查询

    1.外键: 增加外键 创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段) 在新增表之后增加外键:修改表结构,使用alter ta ...

  8. mysql 删除外键 sql语句_sql server ql语句删除外键和删除

    sql server ql语句删除外键和删除 alter table tablename add constraint ordersrelationship foreign key mployeeid ...

  9. mysql和sql定义外键约束_SQL外键约束的含义及创建

    建立外键约束可以对sql语句的增删改有约束作用. 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键 ...

  10. 关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存

    关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存 其实解决办法十分简单: 首先确保你能够级联保存数据,当然除了关联表的外 ...

最新文章

  1. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
  2. 在腾讯云轻量云服务器上搭建mysql数据库
  3. BGP聚合as-set advertise-map
  4. 解决报错:java.util.UnknownFormatConversionException: Conversion = ‘p‘
  5. Android安卓|安卓概述、安卓开发、安卓入门、安卓架构
  6. 吴恩达深度学习4.4练习_Convolutional Neural Networks_Face Recognition for the Happy House
  7. vue(ref父组件使用子组件中定义的方法)
  8. 把一个字符串分割成数组 php_php explode 将字符串分割为数组
  9. 三角网导线平差实例_三角网条件平差计算
  10. 苹果手机屏幕镜像搜索不到电视_手机自带的无线投屏总说找不到设备?
  11. 靠谱,这个低代码平台贼好用
  12. 流媒体有哪些播放方式?流媒体视频三种播放方式介绍
  13. 【PyTorch修炼】一、安装GPU的pytorch详细教程(避坑)
  14. 11对战平台服务器怎么修改,11对战平台无法登陆的解决方法
  15. Springboot集成thymeleaf报此应用程序没有/error的显式映射,因此您将其视为回退。This application has no explicit mapping for /err
  16. spark加载模型与gRPC与JSF与JDQ冲突
  17. 搭建云端数据库【MongoDB】
  18. Packet Capture(Android APP端抓包工具)
  19. python语言处理初探——分词、词性标注、提取名词
  20. Docker 开启 buildx 多CPU架构镜像制作

热门文章

  1. kubernetes kubeadm init kube-apiserver.yaml already exists
  2. 比特币交易的脚本如何执行
  3. 散粉在哪个步骤用_平时用的散粉除了所谓的定妆,还有这么多好处啊?
  4. 设计佣金问题的java程序_三角形、nextday、佣金问题实验报告.doc
  5. 简单的java程序设计原则和模式
  6. jQuery 省市区多级(三级/四级/五级。。。)联动 BY 凨来了
  7. Google 的核心 Java 库 guava 常用工具类
  8. Solr 4.10.3 集成 IK Analyzer 2012FF 中文分词器
  9. 20. Valid Parentheses[E]有效的括号
  10. 第43条:掌握GCD及操作队列的使用时机