mysql个人学习笔记——主键、唯一键

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38427857/article/details/88830503

在总结主键和唯一键之前,先简单介绍一下索引。

索引

对目标数据单独建立一个索引文件,使得对这些数据的查询可以通过索引文件进行快速查询。
意义:
1、提高查询效率
2、约束数据的有效性(唯一性[主键、唯一键]等)

但是由于索引文件可能比数据本身还大,使用索引需综合考虑内存和查询效率问题。

索引种类:

1、主键索引:primary key
2、唯一键索引:unique key
3、全文索引:fulltext key
4、普通索引: index

primary key主键

在表中主键字段的每个数据都唯一,如(学号,id等),主键不允许该字段为空,创建主键后自动把该字段的属性改成not null
在这里插入图片描述

创建主键

语法:
1、创建表时:字段名 字段类型 字段属性 primary key
如:

create table my_pri1(id int primary key,name char(2));

2、创建表时:所有字段后,primary key(字段名)
如:

create table my_pri2(id int,name char(2),primary key(id));

3、创建表后:alter table 表名add primary key(字段名);
如:

alter table my_pri3 add primary key(id);

查看主键

语法:
1、desc 表名
在这里插入图片描述
2、show create table 表名
在这里插入图片描述

删除主键

语法:alter table 表名drop primary key;
在这里插入图片描述

复合主键

用多个字段组合成一个主键唯一识别一条记录。
(如:1个学生可以有多门课程,1门课程可以有多个学生,但1个学生1门课程只有1个成绩,这里学生的学号和课程名共同组成唯一组合(主键),确定成绩)

创建复合主键

语法:
1、创建表时:所有字段后,primary key(字段名,字段名,..);
如:

create table my_pri4 (id int,course int,primary key(id,course));

2、创建表后:alter table 表名add primary key(字段名,字段名,…);
如:

 alter table my_pri3 add primary key(id,course);

在这里插入图片描述

主键约束

作为主键的字段不能为空,且在表中该字段中的每个数据唯一,不能重复。

主键分类

1、业务主键:有业务意义的主键(如学号,名字(不考虑重名情况))
2、逻辑主键:自然增长的整型(没有业务意义,仅是作为唯一识别每条记录的标号,应用广泛)

主键冲突

主键冲突即向表中插入记录,该记录中主键字段的数据与表中原有数据重复。
在这里插入图片描述
解决方法:发生冲突时,用新数据替换旧数据
语法:
1、insert into 表名 values(值列表) on duplicate key update 字段名 = 新值, 字段名 = 新值, 字段名 = 新值,…;
update后面没出现的字段,将沿用旧值
在这里插入图片描述
2、replace into 表名 values(值列表);
直接覆盖原有记录
在这里插入图片描述

auto_increment 自动增长(列属性)

auto_increment 只使用用数值类型(如:int、double等)
字段添加自动增长属性后,当插入数据时,没有给定该字段的数据,系统将根据原有数据自动增长后填充到该字段中。常用于逻辑主键。
语法:字段名 字段类型 [字段属性] auto_increment
如:

alter table my_pri3 modify id int not null auto_increment;

在这里插入图片描述

增长原理

系统中有一组数据用来保存自动增长属性的字段,当插入数据时,自动增长字段没有给定值,则将保存的数据(0或上一个插入的数值)加上指定步长(默认为1)作为该字段的数值(可通过查看表的创建语句直接查看将要插入的数据)。
在这里插入图片描述
下一个将要插入的自增长(假如下一次插入依然没有给定数据)
在这里插入图片描述
在这里插入图片描述

删除记录时,自增长不改变
当需要删除全部记录后重置自增长,可使用指令:truncate 表名;
注意:truncate 表名;相当于删除表后重新新建一个结构一样的表。指令执行后,将清空所有数据
在这里插入图片描述
在这里插入图片描述

修改增长

语法:alter table 表名 auto_increment=x;
在这里插入图片描述
ps:一个表中只能有一个自增长,且将要设定成自增长的字段必须是键
在这里插入图片描述

查看自增长初始设定

语法:show variables like ’auto_increment%’;

修改自增长初始设定(不能设置为0)

指令:set 变量名 = xx;
在这里插入图片描述
在这里插入图片描述
当试图把步长设置为0时,系统将会把步长自动设为1。
在这里插入图片描述

unique key唯一键

唯一键,保证字段内每个数据具有唯一性,但null可以有多个。
与主键区别:唯一键可以有多个,允许有空值null。
在这里插入图片描述

创建唯一键

语法(与主键类似):
1、创建表时:字段名 字段类型 字段属性 unique [key]
如:

create table my_uni1(id int unique );

2、创建表时:所有字段后,primary key(字段名)
如:

create table my_uni2(id int,unique key(id));

如果括号内为字段列表,将组成复合唯一键,以第一个字段名作为唯一键名字。
在这里插入图片描述

若需要多个唯一键,需要分开写。
在这里插入图片描述

3、创建表后:alter table 表名add unique key(字段名);
如:

alter table my_uni3 add unique key(id);

查看唯一键

语法:
1、desc 表名;
在这里插入图片描述

2、show create table 表名;
在这里插入图片描述

删除唯一键

语法:alter table 表名 drop index 唯一键名字;
如:

alter table my_uni3 drop index course;

复合唯一键

语法:unique(字段列表)
在这里插入图片描述

ps:一般主键用作逻辑主键,其他需要确保唯一性的字段用唯一键。

展开阅读全文

没有更多推荐了,返回首页