主键和外键都是约束。主键用于保持数据完整性,外键作用于两个表建立连接。下面分别介绍主键、外键及其区别。

主键

表中经常有多个列,主键是唯一标识表中每行的列。一个表只能有一个主键,主键列不能包含null值。

例如:
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键;

课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键

联合主键

当某一列不能唯一识别每行,使用联合主键,将两列看为一个整体。非空、唯一、不重复。

例如:
成绩表(学号,课程号,成绩)

成绩表中单一一个属性无法唯一标识一条记录,学号和课程编号的组合才可以唯一标识一条记录,所以学号和课程编号的属性组是一个主键。

外键

外键用于与另一张表相关联。以另一个表的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
表的外键值必须在主表中能找到。
当主表的记录被从表参照时,主表的记录不允许删除。

例如:

class表与Student表通过class_id 关联,实现一对多的关系。class_id作为Student表的外键,Student表为从表,在class表中为主键,class表为主表。

主键、外键和索引的区别:

a.定义

主键:唯一标识一条记录,不能有重复,不允许为空。
外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值。
索引:该字段没有重复值,但可以有一个空值。

b.作用

主键:用来保证数据完整性
外键:用来和其他表建立联系用
索引:用来提高查询排序的速度

c.个数

主键:主键只能有一个。
外键:一个表可以有多个外键。
索引:一个表可以有多个唯一索引。

添加主键、外键约束

主键约束

create table 表名(列名1 数据类型 primary key,列名2 数据类型
);
--------或------------
create table 表名(列名1 数据类型,列名2 数据类型,primary key(列名1)
);
------已经存在的表-----
alter table 表名 add primary key(列名);

外键约束

---------主表------
create table 表1(列名1 数据类型 primary key,列名2 数据类型
);
----从表(外键约束所在的表)------
create table 表2(FK_列名1 数据类型,列名2 数据类型,constraint 外键约束的名字 foreign key(从表的列名1) references 主表表名(主表的列名1)
);

MySQL数据库主键与外键相关推荐

  1. MySql数据库主键外键与数据库设计

    MySql数据库主键外键与数据库设计 首先要指出的: 列.字段.属性是一个概念 行.记录.元组是一个概念 MySQL数据库CONSTRAINT约束:非空约束,唯一约束,主键约束,外键约束 show c ...

  2. mysql中主键外键的作用_数据库主键和外键的作用以及索引的作用,它的优缺点是什么?...

    定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证 ...

  3. 数据库主键与外键的区别

    数据库主键与外键 我们知道,好的数据结构会影响速度,当然,好的数据库表设计会影响数据库操作效率.特别是数据特别多的时候如果表的结构不好的话,操作将会变得特别复杂.其中,主键和外键值得我们去了解. 在开 ...

  4. (转)关于数据库主键和外键(终于弄懂啦)

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  5. SQL SERVER 数据库主键和外键的思考

    SQL SERVER 数据库主键和外键的思考 什么是主键: 主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行.这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性.当创建或者更 ...

  6. 关于数据库主键和外键

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  7. 数据库主键、外键和唯一键的区别

    数据库主键.外键和唯一键的区别 现在我们想建立学生表,用来存储,一个系统的登陆信息.建表如下: create table student4 (stu_id int primary key identi ...

  8. 关于数据库主键和外键,索引

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号 ...

  9. 关于数据库主键和外键的作用与区别

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  10. MySQL:创建数据库,数据表,主键和外键

    目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表: 主键约束: 单字段主键: 多字段联合主键: 外键约束: 前言: MySQL数据库安装了 ...

最新文章

  1. HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想
  2. mqttnet 详解_MQTTnet 3.0.5学习笔记
  3. C 语言编程 — 数据类型转换
  4. linux创建表空间 没有权限,Linux oracle数据库创建表空间、用户并赋予权限
  5. Flex 幻灯片播放
  6. html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签
  7. 解释什么是快速排序算法?_解释排序算法
  8. [原]好玩的Linux,关于时间cal命令
  9. oracle -12169,很奇怪的错误ORA-12169
  10. python中os.path.dirname(__file__)的使用(获取文件夹路径)(获取当前py文件绝对路径)
  11. 多节点 devstack 部署
  12. SpreadJS 在 Angular2 中支持哪些事件?
  13. 【codevs1553】互斥的数
  14. 鼎捷T100权限管控设定
  15. Charles抓包微信小程序数据
  16. 计算机硬盘格式化了如何恢复出厂设置,怎么把电脑格式化?
  17. TiDB源码学习笔记:启动TiDB
  18. php js广告,JavaScript_用JS调用谷歌 AdSense广告的方法, 具体的google广告的js文件做 - phpStudy...
  19. 随机数模拟抛硬币实验
  20. 手机短信转发到另一个手机接收_我买了个能贴在手机上的显微镜,结果发现了另一个世界...

热门文章

  1. 现代语音信号处理之语音特征参数估计
  2. Pyqt之模态与无模态对话框(Modal and Modeless)
  3. div内文本(text)居中对齐
  4. CE6870 添加ipv6 策略路由失败问题解决
  5. putty GB2312 BIG5 中文字符集补丁
  6. MFC中CDC画线总结
  7. c语言中保存的文件时怎么换行,关于文件操作,碰到空格就换行
  8. win10 使用cmake编译opencv源码生成VS工程(二)
  9. #include stdafx.h
  10. mac win7 计算机,详解mac如何安装win7