前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 之主键

MySQL 之主键

作者头像
DataScience
发布2020-01-01 22:26:03
3.7K0
发布2020-01-01 22:26:03
举报
文章被收录于专栏:A2DataA2Data

本文标识 : MQ0021

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

编程工具 : MySQL、DBeaver

阅读时长 : 4分钟

前言

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

什么是主键

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

主键选择的遵循原则

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

主键的作用

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

主键的选择

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

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

设置主键的方法

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

代码语言:javascript
复制
#带主键
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
);
在创建数据表完成后再决定主键
代码语言:javascript
复制
CREATE TABLE test4(
id INT NOT NULL,
name VARCHAR(20)NOT NULL,
time TIMESTAMP DEFAULT CURRENT_TIMESTAM
);

ALTER TABLE test4 ADD PRIMARY KEY(id);

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 在创建数据表完成后再决定主键
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档