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

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 ,而不能以邮箱字段为主键

外键:

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

唯一键

刚才我们在需求中说了,我们要用邮箱来注册和登陆,那么肯定需要让邮箱不能重复,并且,我们的邮箱又不是主键,那我们只能将邮箱设置为唯一键了。这样就能满足我们的需求了。

主键与外键以及唯一键的选择的依据——情况之一相关推荐

  1. mysql从零开始自增id_MySQL从零开始 7-表约束之主键,自增长,唯一键

    表约束除了空属性,默认值,描述符以及零填充外(空属性,默认值default,列描述comment以及零填充zerofill),还有主键,自增长,唯一键等对字段的索引和扩展约束. 1. 主键 使用 pr ...

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

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

  3. 数据库元数据数据字典查询_5_列出给定表的主键、外键约束

    列出给定表的主键.外键约束 需求描述 需求:查询出给定的表emp的外键约束信息. 解决方法:通过各个数据库里提供的与外键约束相关的数据字典进行查询. 注: 数据库数据集SQL脚本详见如下链接地址 员工 ...

  4. DataSet 添加数据集、行、列、主键和外键等操作示例

    DataSet 添加数据集.行.列.主键和外键等操作示例 前台代码:html <%@ Page language="c#" Codebehind="CodeUse. ...

  5. SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建

    文章目录 一.主键约束(primary key) 二.外键约束(foreign key) 三.检查约束(check) 四.非空约束(not null) 五.唯一性约束(unique) 六.默认值约束( ...

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

    主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引. 外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据.既没有在另一个表的主键数据中出现的数据 ...

  7. MySQL设置主键、联合主键、外键、唯一约束、非空约束、默认约束

    MySQL登录.查看记录等基本操作 MySQL设置表的属性值自动增加 auto_increment 1.主键.联合主键.外键 1.什么是主键 主键是在多条记录中用于确定一条记录时使用的标识符.主键具备 ...

  8. sql添加删除主键、外键

    在创建表时设立主键.外键 create table student(sid integer,sname nvarchar2(64),teacherId integer,primary key(sid) ...

  9. SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

最新文章

  1. 如何加入LSGO软件技术团队?
  2. mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务
  3. FTP服务器之vsftp
  4. linux 设备管理工具 udev 规则编写
  5. iOS UICollectionView的实现
  6. Learning Collaborative Agents with Rule Guidance for Knowledge Graph Reasoning-学习笔记
  7. 转学伯克利计算机科学,转学前往伯克利大学 你够格吗?
  8. 如何解决IIS配置报错问题:存储空间不足?
  9. 15. 链表中倒数第k个节点(C++版本)
  10. 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符go时,第一个只出现一次的字符是g。当从该字符流中读出前六个字符“google时,,,(C++实现)
  11. javascript 图解 event对象offsetX, clientX, pageX, screenX, layerX, x区别
  12. kali-网站克隆工具-httrack
  13. 【C语言】如何得出各种数据类型所占内存空间
  14. 2021年度上海公务员考试公告(11月05日开启)
  15. Java支付宝APP支付-验证异步通知消息
  16. pubmedy安装不聊了_Pubmedy:显示影响因子+引用数、Sci-hub全文下载的浏览器扩展...
  17. aimp输出dsd_极客评论:音乐播放器AIMP 2
  18. unity ui界面 鼠标变图片移动
  19. ghost使用图解加详细说明
  20. CentOS6 安装Tomcat7

热门文章

  1. MySql 分表、分库、分片和分区
  2. iOS设置Label行间距和字间距
  3. 2022-2023级中国石油大学(北京)MBA提前面试已开启-文都管联院
  4. tib_tiqu_without_temperature
  5. 计算机三级网络技术知识点(八)
  6. 为什么谷歌不收录你的网站
  7. wkwebview替换uiwebview_使用WKWebView替换UIWebView
  8. vue项目中使用阿里巴巴矢量图库图标的操作步骤
  9. 图像视频的常用概念HDR/WDR等
  10. 杰理-断码屏的显示其实也很酷炫