史上最简单的 MySQL 教程(十四)「列属性 之 主键」

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

主键

主键:primary key表中主要的键,每张表只能有一个字段(复合主键,可以多个字段)使用此属性,用来唯一的约束该字段里面的数据,不能重复

增加主键

在 SQL 操作中,有 3 种方法可以给表增加主键,分别为:

第 1 种:在创建表的时候,直接在字段之后,添加primary key关键字

-- 增加主键
create table my_pri1(
	name varchar(20) not null comment '姓名',
	number char(10) primary key comment '学号'
)charset utf8;
1

如上图所示,此方法的优点是清晰明了,缺点则是只能使用一个字段作为主键。

第 2 种:在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键,则称之为复合主键)

-- 复合主键
create table my_pri2(
	number char(10) not null comment '学号',
	course char(10) not null comment '课程编号',
	score tinyint unsigned default 60,
	-- 增加主键限制,学号和课程编号应该是对应的,具有唯一性
	primary key(number,course)
)charset utf8;
2

第 3 种:当表创建完之后,额外追加主键,可以直接追加主键,也可以通过修改表字段的属性追加主键

-- 追加主键
create table my_pri3(
	course char(10) not null comment '课程编号',
	name varchar(10) not null comment '课程名称'
)charset utf8;
3

在这里,追加主键有两种方式,分别为:

  • alter table my_pri3 modify course char(10) primary key comment '课程编号'; -- 不建议使用
  • alter table my_pri3 add primary key(course); -- 推荐使用
4

如上图所示,咱们追加主键成功。不过,想要用此方法,有一个前提,那就是:表中对应字段的数据是不重复的,即保证唯一性

主键约束

主键约束,即主键对应的字符中的数据不允许重复,如果重复,则数据操作(主要是增和改)失败

-- 主键约束(冲突)测试
insert into my_pri3 values('MATH00123','泛函分析');
insert into my_pri3 values('MATH00123','非线性分析');
5

更新主键 & 删除主键

对于主键,没有办法直接更新,主键必须先删除,然后才能更新。

  • 基本语法:alter table + 表名 + drop primary key;

执行如下 SQL 语句,进行测试:

-- 删除主键
alter table my_pri3 drop primary key;
6

如上图所示,咱们已经成功删除表my_pri3的主键啦!想要增加主键,只需要通过前面讲的 3 种方法即可。

主键分类

根据主键的字段类型,咱们可以将主键分为两类,分别为:

  • 业务主键,即使用真实的业务数据作为主键,例如学号、课程编号等等,很少使用;
  • 逻辑主键,即使用逻辑性的字段作为主键,字段没有业务含义,值有没有都没有关系,经常使用。

至此,咱们已经将主键的相关内容讲完啦!


温馨提示:符号+表示连接的意思。


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NET MVC5 后台权限管理系统

.Net 转战 Android 4.4 日常笔记(5)--新软件Android Studio 0.5.8安装与配置及问题解决

说真心话,Eclipse跟我们.net的VS比起来就是屌丝比高富帅,一切都是那么的难用,速度慢得我无法忍受 于是想试试Google钦点的Android Stud...

1817
来自专栏算法channel

Python|Pyinstaller打包Python程序的过程详解

01 Pyinstaller是什么 PyInstaller is a program that freezes (packages) Python progr...

4755
来自专栏技术博客

ExtJs十一(ExtJs Mvc图片管理之一)

图片管理要在两个地方使用:一是标签页内的图片管理,一是文章内容编辑时嵌套到插入图片的窗口内。因而,将图片管理做成一个扩展比较方便。当然,做成MVC模式也行,不争...

903
来自专栏章鱼的慢慢技术路

Linux命令_磁盘管理_查看磁盘或目录的容量

1615
来自专栏L宝宝聊IT

Mysql性能优化——慢查询分析

MYSQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入...

742
来自专栏苦逼的码农

Linux大人养成计划1---基础命令总结

刷了一波视频,现在把Linux的一些常用基本命令总结了下。学会这些,Linux的基本操作就会了。

673
来自专栏蛋未明的专栏

siege做并发请求得到折线图

1475
来自专栏V站

PHP中上传图片表单$_FILES为空的解决办法

在文件上传中$_FILES接收不到值的情况有很多种,总结一下常见的错误有下边几种,也是大家在使用中容易犯的错误。 1.在form中忘记加enctype="mul...

2112
来自专栏java一日一条

29 个你必须知道的 Linux 命令

虽然Linux发行版支持各种各样的饿GUI(graphical user interfaces),但在某些情况下,Linux的命令行接口(bash)仍然是简单快...

833
来自专栏王磊的博客

解决React Native unable to load script from assets index.android.bundle on windows

React Native运行的时候,经常碰到React Native unable to load script from assets index.andro...

3157

扫码关注云+社区