下面我通过一个小栗子来说明我们应该如何选择主键,外键和唯一键。 
现在我们想建立学生表,用来存储,一个系统的登陆信息。建表如下:

create table student4
(
  stu_id int primary key identity,--identity表示自增
  stu_name nvarchar(10) unique not null,
  stu_sex nchar(1) not null,
  stu_address nvarchar(100) unique not null,
  stu_email nvarchar(50)
 )
我们要求,以后再使用的过程,我们要让大家使用邮箱注册,并通过邮箱来登陆。

主键:
根据上面的需求,我们先说主键的选择。 
相信大家一看,我们可以使用邮箱登陆,那么邮箱一定是唯一的,那么用邮箱来做主键吧。其实不然,用邮箱做主键还是有问题滴。问题有如下四点。 
1、比如,我后期换邮箱呢,那不就惨了吗。 
2、如果其他的表已经关联的本学生表的主键——邮箱,那么在我们更换邮箱后,如果不修改其他表中的外键,那么就会报错。如果要是修改的话,可能工作量将会非常的大。 
3、另外,在查询邮箱的的时候,搜索速度非常的慢。 
4、如果多个表外键利用学生表的主键,那么就会导致空间的浪费 
为此,最好增加一个没有意义的编号为主键,不要 以业务逻辑的字段为主键,,比如,设置一个stu_id ,而不能以邮箱字段为主键

外键:
其他表,如果需要关联学生表,那需要在表中添加外键来关联学生表,那我们首先的是使用学生表中的主键,万不得已在选择唯一键。

唯一键
刚才我们在需求中说了,我们要用邮箱来注册和登陆,那么肯定需要让邮箱不能重复,并且,我们的邮箱又不是主键,那我们只能将邮箱设置为唯一键了。这样就能满足我们的需求了
总的来说,主键唯一标示表中的每一条记录,外键是主键的副本,从父表中复制出来的,用于建立父表和子表之间的关系,唯一键 确保表中某一个值得唯一性。主键保证了数据的唯一性,外键保证了数据的完整性。
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

数据库 主键 外键 唯一键区别相关推荐

  1. mysql中表的约束,主键外键唯一键

    mysql2 表的约束 空属性(NULL) 默认值 列描述 zerofill 主键 主键属性 复合主键 追加主键 删除主键 自增长 唯一键 外键 表的约束 空属性(NULL) 此时 name 的 Nu ...

  2. 约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏

    文章目录 1. 约束(constraint)概述 2. 非空约束 3. 唯一性约束 4. PRIMARY KEY 约束 5. 自增列:AUTO_INCREMENT 6. FOREIGN KEY 约束 ...

  3. [数据库03]-约束(唯一性-主键-外键/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式

    [数据库03]-约束(唯一性-主键-外键)/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式 一.约束 1.1 唯一性约束(unique) 1.2 主键约束 1.3 外键约束 二.存储引擎 2 ...

  4. sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由

    点击上方蓝色字体,选择"置顶公众号" 优质文章,第一时间送达 作者 | bang,Piotr Kononow 链接 | www.jdon.com/49188 Piotr Konon ...

  5. mysql 主键外键sql_SQL外键VS主键说明了MySQL语法示例

    mysql 主键外键sql A Foreign Key is a key used to link two tables. The table with the Foreign Key Constra ...

  6. 主键主键外键和索引_主键和外键的目的/用途是什么?

    主键主键外键和索引 Primary and foreign keys are a way in which to constrain related data together to ensure d ...

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

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

  8. mysql数据库约束详解_MySQL数据库中的外键约束详解

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器 ...

  9. SQL-主键外键的定义

    primary key 主键 需设置为不为空不重复&自增列 not null auto_increment primary key 一个表仅允许一个主键,但主键可由多列组成 create ta ...

最新文章

  1. R语言dplyr包使用group_by函数、arrange函数和filter函数获取每个分组的第一个、第N个、最后一个记录实战
  2. c++ vector 赋值_Vector 源码剖析
  3. 201712-1最小差值
  4. JavaScript模块化不算漫长的发展史
  5. python中的小魔法(一)
  6. 一本通1629聪明的燕姿
  7. LeetCode 605 种花问题
  8. 求1+2+3+...(信息学奥赛一本通-T1158)
  9. 拖拽功能 php,基于Vue实现拖拽功能
  10. redis获取存在的键值_Redis 分布式锁、限流
  11. Axure 基本功能
  12. mysql varbinary类型_mysql中varbinary、binary、char、varchar异同
  13. linux文件实时同步(rsync+inotiy)
  14. Python3,9行代码进行压缩和解压缩,从此告别压缩软件。
  15. ElasticSearch进阶(五)MetricBeat的简单使用
  16. 李开复:几年内电子商务上市潮会来临
  17. UVA 10451 Ancient Village Sports UVA 11909 Soya Milk UVA 11152 Colourful Flowers
  18. java 实现EME2000(国家大地坐标系)转ECEF坐标系(地心地固坐标系)
  19. 西门子PLC配KUKA机器人程序 程序为西门子S7-1500PLC博途调试
  20. 蓝色荧光染料Monobromobimane (mBBr) 单溴二胺71418-44-5

热门文章

  1. Word处理控件Aspose.Words功能演示:在 Python 中将 Word DOCX 或 DOC 转换为 PDF
  2. JUST技术:分布式时序相似查询初探
  3. 斯图飞腾Stratifyd发布《2021金融服务行业客户体验报告》
  4. PYTHON爬虫爬取豆瓣电影的一周口碑电影排行榜
  5. 历史遗留问题:处理了null的脏数据 可是什么动作会产生null了?
  6. 【Unity】Shader效果——Snow雪地
  7. [句子成分] 二、谓语 表语
  8. 看这一篇,你还不会Linux吗?
  9. 轻松实现Android 更换皮肤(主题)
  10. 计算机思维在体育领域的贡献,终身成长 | 思维带来的差距如何在体育界中体现出来...