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);