专栏首页A2DataMySQL 之主键

MySQL 之主键

本文标识 : MQ0021

本文编辑 : 长安月下赏美人儿

编程工具 : MySQL、DBeaver

阅读时长 : 4分钟

前言

小编在查询相关的学习资料的同时,偶尔会遇到关于主键的信息,也是一直没有很清晰的认知,所以,这篇学习笔记,主要是和大家一起分享有关主键的知识。

什么是主键

  • 含义:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键。
  • 定义:PRIMARY KEY
  • 注意:主键之于数据表相当于口红之于女人,可以不用,但最好还是有

主键选择的遵循原则

  • 任何两行都不具有相同的主键值
  • 每行必须具有一个主键值,且不允许设置为NULL
  • 主键应当是对用户没有意义的
  • 永远不要更新主键,主键除了唯一标识一行之外再无其他意义
  • 主键不应包含动态变化的数据,如时间戳、创建/修改时间列等
  • 主键应当由计算机自动生成

主键的作用

  • 保证实体的完整性
  • 加快数据库的操作速度
  • 在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复
  • DBMS自动按主键值的顺序显示表中的记录
  • 如果没有定义主键,则按输入记录的顺序显示表中的记录

主键的选择

  • 编号为主键 方法:选择唯一字段“编号”作为主键设计 场景:多用于小型项目 缺点:若修改编号,后果严重;若允许编号重复,则彻底懵逼

  • 自动编号为主键 方法:新建一个 ID 字段,自动增长 优点:便于检索传递、空间小、无主键重复问题 缺点:插入指定 ID 记录会麻烦、与非数字型主键系统对接麻烦
  • Max加一 方法:无自动增长的数字型,采用 Insert时,读取 Max 值后加一 优点:避免自动编号的问题 缺点:记录多会严重影响效率、会出现相同值的情况

设置主键的方法

在创建数据表的同时决定是否有主键

#带主键
CREATE TABLE test1(
id INT NOT NULL PRIMARY KEY,
name CHAR(20)
);

#带复合主键
CREATE TABLE test2(
id INT NOT NULL,
name CHAR(20),
PRIMARY KEY(id,name)
);

#主键自增
CREATE TABLE test3( 
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 
name VARCHAR(20), 
time TIMESTAMP DEFAULT CURRENT_TIMESTAM
);

在创建数据表完成后再决定主键

CREATE TABLE test4(
id INT NOT NULL,
name VARCHAR(20)NOT NULL,
time TIMESTAMP DEFAULT CURRENT_TIMESTAM
);

ALTER TABLE test4 ADD PRIMARY KEY(id);

本文分享自微信公众号 - DataScience(DataScienceTeam),作者:长安月下赏美人儿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Python基础】字典的用法你了解吗

    字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。

    DataScience
  • Split原来是这样用的

    sql的思路呢,就是需要先进行split,然后用length 加上 substr来控制首段的位数,来进行截取输出。

    DataScience
  • Java-IO字节流

    DataScience
  • 浅谈数据库主键策略

    浅谈数据库主键策略 数据库表的主键很多童鞋都非常熟悉了,主键就是Primary Key,简称PK。 数据库主键的作用是唯一标识一条记录,所以在同一张表中,...

    用户1212940
  • 数据结构(ER数据库)设计规范 原

    表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为:

    随风溜达的向日葵
  • mysql 中select for update 锁表的范围备注

      实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②,但是更新id不为1的项目时可以直接更新③,释放锁后④,可以任意更新⑤

    肖哥哥
  • 数据库MySQL-实体之间的关系

    答:在字段数量很多情况下,数据量也就很大,每次查询都需要检索大量数据,这样效率低下。我们可以将所有字段分成两个部分,“常用字段”和“不常用字段”,这样对大部分查...

    cwl_java
  • SQL反模式学习笔记22 伪键洁癖,整理数据

    在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键机制。

    张传宁老师
  • 向mysql数据库中插入数据时显示“Duplicate entry '1′ for key ‘PRIMARY' ”错误

    错误情况如题,出现这个错误的原因十分简单: 很明显,这是主键的问题。 在一张数据表中是不能同时出现多个相同主键的数据的 这就是错误的原因,解决的方法...

    roobtyan
  • 面试官:MySQL表设计要注意什么?

    其实上面这些问题,我最早想法是,每个问题都可以啰嗦出一篇文章。后来由于良心发现,烟哥就决定用一篇文章将这些问题都讲明白。 当然,我给的回答可能并非标准答案,毕竟...

    Java3y

扫码关注云+社区

领取腾讯云代金券