MySQL 之主键
- 2020 年 1 月 1 日
- 筆記
本文标识 : 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);


