展开全部

数据库主键

主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样e69da5e6ba9062616964757a686964616f31333365643534的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

作用:

1)保证实体的完整性;

2)加快数据库的操作速度

3) 在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。

4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。

主键的无意义性

在开发过程中,读者可能会看到将一些表使用有意义的字段表示主键,例如“用户登录信息表”将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,因为将这些主键基本不具有“意义更改”的可能性。但是,也有一些例外的情况,例如“订单表”需要支持需求“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,那将“订单编号”作为主键就满足不了要求了。因此读者在使用具有实际意义的字段作为主键时,需要考虑是否存在这种可能性。

主键的选择

①编号作主键

此方法就是采用实际业务中的唯一字段的“编号”作为主键设计,这在小型的项目中是推荐这样做的,因为这可以使项目比较简单化,但在使用中却可能带来一些麻烦,比如要进行“编号修改”时,可能要涉及到很多相关联的其他表,就像黎叔说的“后果很严重”;还有就是上面提到的“业务要求允许编号重复时”,我们再那么先知,都无法知道业务将会修改成什么?

②自动编号主键

这种方法也是很多朋友在使用的,就是新建一个ID字段,自动增长,非常方便也满足主键的原则,优点是:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。

缺点:其实缺点也就是来自其优点,就是因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的);如果其他系统主键不是数字型那就麻烦更大了,会导致修改主键数据类型了,这也会导致其他相关表的修改,后果同样很严重;就算其他系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个“o”(old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。

mysql主键干嘛的_数据库表中的主键有什么作用?相关推荐

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

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

  2. 实际开发中,是否会在数据库表中设置外键?

    本科学习数据库的时候,书上明确的写了对于多对多关系必须要创建外键,可是最近在跟师兄做一个B/S架构的项目,发现所设计的数据库表虽然是多对多关系但并没有要求外键,查了一下之后才发现目前的大型系统中(尤其 ...

  3. mysql 联结主键_联结表中的复合主键 - Sequelize

    使用Sequelize和MySQL数据库,我试图在联结表中实现复合主键组合,但遗憾的是没有结果 . 我有 table : 它们与许多人有很多关系 . 在联结表user_has_project中,我想要 ...

  4. a表两个字段都与b表一个字段关联_数据库表的主键实例分析

    主键(PRIMARY KEY):数据库表通常具有包含唯一标识表中每一行的值的一列或一组列.这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 业务主键(自然主键):在数据库表中把具有业务 ...

  5. mysql外码是什么意思_数据库中的外键是什么意思?

    展开全部 外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列.通过32313133353236313431303231363533e4b893e5b19e31333433633436将保存表 ...

  6. MySQL笔记:第11章_数据库的设计规范

    第11章_数据库的设计规范 1. 为什么需要数据库设计 2.范式 2.1范式简介 2.2范式都包括哪些 2.3 键和相关属性的概念 2.4第一范式(1st NF) 2.5 第二范式(2nd NF) 2 ...

  7. 数据库表设计索引外键设计_关于索引的设计决策 数据库管理系统

    数据库表设计索引外键设计 Introduction: 介绍: The attributes whose values are required inequality or range conditio ...

  8. mysql表结构设计_数据库表结构设计

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...

  9. mysql视图和中间表_数据库设计中的14个技巧

    时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

最新文章

  1. 【Web安全】PHP与Web表单交互-POST方法与GET方法(看不懂你来打我)
  2. 你真的会正确使用日志吗?
  3. Vue.js-Day06-AM【项目实战(附带 完整项目源码)-day01-am:移动端响应式(响应式尺寸、视口问题、实现rem变化、rem设计)、实战项目搭建(初始化项目、处理rem、搭建路由)】
  4. 数据可视化(matplotlib绘图)
  5. m031开发 新唐_M031
  6. WordPress博客添加首页、文章页、页面、分类页、标签页的关键字和描述
  7. String类的编码和解码问题
  8. Query ajax操作!!
  9. 新的vulkan的SDK很难下载
  10. Rufus刻录大于4G系统镜像
  11. 多功能雨伞项目计划书_多功能的雨伞创业项目计划书
  12. cordic ip核 vivado_Xilinx Vivado Cordic 核的使用
  13. Windows 2008 Server搭建Radius服务器
  14. Uber天使投资人杰森卡拉卡尼斯投资…
  15. 百度快照劫持是什么意思?如何解决百度快照被劫持、百度劫持
  16. 为什么要学习 Linux?
  17. 01--计算机基础知识
  18. 微信小程序如何使用解析 nbsp; lt; gt; amp; apos; ensp; emsp;等字符?
  19. 【软件2.0】软件2.0时代来了!特斯拉AI负责人说:神经网络正在改变编程
  20. mybatis-plus ${ew.customSqlSegment} 使用的史诗级大坑

热门文章

  1. JS实现图片压缩,兼容ios,
  2. 茅台高管年薪200多万
  3. 雷柏 v500s 键盘 开箱
  4. MySQL 1045登录失败
  5. 智慧政务说明书 信息报送(九)
  6. Vue complier 实现
  7. 80%的软件环境管理问题,根因都在这里 | 研发效能提升36计
  8. 用nodej和glub-watcher写的监听go 项目自动编译,很鸡肋
  9. ssm+mysql企业退休人员服务管理系统-计算机毕业设计源码28000
  10. Kn Script V6.3.0 震撼来袭!原名QQ可能想认识的人引流脚本