字段属性之主键&增删改查&自增长&唯一键约束

标签: MySQL  主键约束  增删改查  唯一键  自增长

字段属性之主键&自增长&唯一键约束

主键

主键:primary key 主要的键 一张表中只有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键

一张表只能最多一个主键

增加主键

SQL操作中有多种方式增加主键大体分为三种
1.在创建表的时候直接在字段之后跟primary key关键字(主键本身不允许为空)

-- 增加主键
Create table my_pri1(
Name varchar(20)  not null comment ‘姓名’,
Number char(10) primary key comment ‘学号’
)charset utf8;

这里写图片描述
优点:非常直接:缺点:只能使用一个字段作为主键
2.在创建表的时候,在所有字段之后,使用 primary key(主键列表),来创建主键(如果有多个字段作为主键,可以是复合主键)

-- 复合主键
Create table my_pri2
(
Number char(20) comment ‘学号’,
Course char(10) comment ‘课程代码’,
Score tinyint unsigned default 60 comment ‘成绩’,
-- 增加主键限制 : 学号和课程号应该是对应的,具有唯一性
Primary key(number,course)
)charset utf8;

这里写图片描述
3.当表已经创建好之后,再次额外的追加主键,可以通过修改表字段属性,也可以直接追加。

alter table 表名 add primary key (字段列表);

-- 追加主键
Create table my_pri3
(
Course char(10) not null comment ‘课程编号’,
Name varchar(10) not null comment ‘课程名字’
)charset utf8;

这里写图片描述

Alter table my_pri3 modify course char(10) primary key comment ‘课程编号’;
Alter table my_pri3 add primary key(course);

这里写图片描述
前提:表中字段对应的数据本身是独立的(不重复)

主键约束

主键对应的字段中的数据不允许重复,一旦重复数据操作失败(增和改)

-- 向pri1插入数据
Insert into my_pri1 values (
‘古天乐’,’itcast0001’
),(‘刘德华’,’itcast0002’);
Insert into mypri2 values (‘itcast0001’,’39010001’,90),(‘itcast0001’,’39010002’,’85’),(‘itcast0002’,’39010001’,’90’);

这里写图片描述

-- 主键冲突(重复)
Insert into my_pri1 values (‘刘辉’,’itcast0002’);    -- 不可以:主键冲突
Insert into my_pri2 values (‘itcast0001’,’39010001’,100);    -- 不可以;冲突

这里写图片描述

主键更新 &删除主键

没有办法更新主键:主键必须先删除,才能增加
Alter table 表名 drop primary key;

-- 删除主键
Alter table my_pri1 drop primary key ;

这里写图片描述

主键分类

实际创建表的过程中,很少使用真实业务数据作为主键字段(业务主键,如学号,课程号);大部分的时候是使用逻辑性的字段(字段没有业务含义,值是什么都没有关系),将这种字段主键称之为逻辑主键。

Create table my_student(
Id int primary key auto_increment comment ‘逻辑增长:自增长’, --逻辑主键
Number char(10) not null comment ‘学号’,
Name varchar (10) not null
);

自动增长

自增长,当对应的字段,不给治或者说给默认值,或者给null的时候,会自动的被系统出发系统会从单签字段中已有的最大值再进行+1操作得到一个新的不同的字段
自增长通常是跟主键搭配

自增长特点 :auto_increment
1.任何一个字段要做自增长必须前提是本身是一个索引(key一栏有值)
这里写图片描述
2.自增长字段必须是数字(整型)
这里写图片描述
3.一张表最多只能有一个自增长

-- 自增长
Create table my_auto
(
Id int primary key auto_increment comment ‘自动增长’,
Name varchar (10) not null
)charset utf8;

这里写图片描述
自增长使用
当自增长被给定为null或者默认值的时候会出发自增长

-- 出发自增长
Insert into my_auto(name) values (‘小猪猪’);
Insert into my_auto values (null,’猪’);
Insert into my_auto values (default,’张三’);

自增长的开始值默认是一,每次加一
自增长如果对应的字段输入了值,那么自增长失效,但是下次还是能够正确的自增长(从最大值+1)
这里写图片描述
如何确定下一次是什么时候自增长呢?可以通过查看表创建语句看到
这里写图片描述
修改自增长
自增长如果是涉及到字段改变:必须先删除自增长,后增加(一张表只能有一个自增长)
修改当前自增长已经存在的值:修改只能比当前已有的自增的最大值大,不能小(小不生效)
Alter table 表名 auto_increment = 值;

-- 修改表选项的值
Alter table my_auto auto_increment = 4; -- 向下修改
Alter table my_auto auto_increment = 10 ; -- 向上修改
向上修改才生效

为什么自增长是从1开始,为什么每次都是自增1呢?
所有系统的表现如字符集,校对集,都是由系统的内部的变量进行控制的,
查看自增长对应的变量
show variables like ‘auto_increment%’;
这里写图片描述
可以修改变量实现不同的效果,修改是对整个数据修改,而不是单张表:(修改是会话级)

Set auto_increment_increment=5;   -- 一次自增5

这里写图片描述
删除自增长
自增长是字段的一个属性,可以通过modify来进行修改(保证字段没有auto_increment即可)
Alter table 表名 modify 字段 类型

– 删除自增长
Alter table my_auto modify id int primary key; – 错误:主键理论是单独存在的

这里写图片描述

Alter table my_auto modify id int;  -- 有主键的时候不需要再加主键了

这里写图片描述

唯一键

一张表中有很多字段需要具有唯一性,数据不能重复:但是一张表中只有一个主键:唯一键(unique key )就可以解决表中有多个字段需要唯一性约束问题

唯一键的本质与主键差不多,唯一键默认的允许自动为空。而且可以多个为空(空字段不参与唯一性比较)

增加唯一性
基本与主键差不多的三种方案
方案1:创建表的时候,字段之后直接跟 unique unique key

-- 创建表
Create table mu_unique1(
Number char(10) unique ,
Name varchar(20) not null
)charset utf8;

这里写图片描述
方案2:在所有的字段之后增加unique key (字段列表)– 复合唯一键

Create table my_unique2(
Number char(10)  not null,
Name varchar(20) not null,
Unique key(name)
)charset utf8;

这里写图片描述
方案3:在创建表之后创建为唯一键

Create table my_unique3(
Id int primary key auto_increment,
Number char(10) not null
)charset utf8;
-- 追加唯一键
Alter table my_unique3 add unique key (number);

这里写图片描述
唯一键约束
唯一键与主键本质相同,唯一区别就是唯一键默认允许为空,而且是多个为空

-- 插入数据
Insert into mu_unique1 values(null,’增光’),(‘itcast0001’,星星’),(‘’null,’帅帅’);

这里写图片描述
如果唯一键不允许为空,与主键的约束作用是一致的
更新唯一键和删除唯一键
先 删除后新增(唯一键可以有多个,可以不删除)

删除唯一键
Alter table 表名 drop unique key;  -- 错误:唯一键有多个
Alter table 表名 drop index 索引名字 -- 唯一键默认的使用字段名作为索引名字

这里写图片描述

-- 删除唯一键
Alter table my_unique3 drop index number;

这里写图片描述

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

智能推荐

Springboot整合rabbitMQ

依赖: 配置文件application.yml RabbitConfig 消息生产者RabbitProducer 消息消费者RabbitCustomer 通过Controller进行调用 启动项目后调用接口: 结果:...

Thread.join()方法的使用

如果一个线程A执行了thread.join()语句,代表当前线程A等待thread线程终止后才从thread.join()方法返回 并且这个方法具有超时特性,可以添加参数设置 输出结果: jdk中Thread.join()方法的源码(进行了部门调整)   每个线程终止的条件是前驱线程的终止,每个线程等待前驱线程终止后,才从join()方法返回,  当线程终止时,会调用自身的no...

linux服务器部署jenkins笔记

安装jenkins参考文档:https://blog.csdn.net/tomatocc/article/details/83930714 1. 打开jenkins官网:https://jenkins.io/download/ 将war包下载到本地 **ps:**这里要注意的是要下载左边下方的war包,不要下载右边下面的war包。左边是稳定版本,右边是最新版本,建议大家使用稳定版本(我刚开始下载的...

k8s部署elasticsearch集群

百度营销大学     环境准备 我们使用的k8s和ceph环境见: https://blog.51cto.com/leejia/2495558 https://blog.51cto.com/leejia/2499684 ECK简介 Elastic Cloud on Kubernetes,这是一款基于 Kubernetes Operator 模式的新型编排产品,用户可使用该产品在...

saas-export项目-AdminLTE介绍与入门

AdminLTE介绍 (1)AdminLTE是什么? AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具 (2)AdminLTE有什么特点? 提供一系列响应的、可重复使用的组件, 并内置了多个模板页面 自适应多种屏幕分辨率,兼容PC和移动端 快速的创建一个响应式的Html5网站 AdminLTE 不但美观, 而且可以免去写很大CSS与JS的工作量 AdminLTE...

猜你喜欢

MyBatis中ResultMap结果集映射

用于解决属性名和字段名不一致的情况: resultMap 元素是 MyBatis 中最重要最强大的元素。...

编写一个shell

编写shell的过程: 1.从标准输入中读入一个字符串。 2.解析字符串 3.创建一个子进程的执行程序。 4.子进程程序替换。 5.父进程等待子进程退出。...

WEB自动化测试中Xpath定位方法

前言: Xpath是在XML文档中查找信息的一种语言,使用路径表达式来选取XML文档中的节点或节点集,由于XML与HTML结构类似(前者用于传输数据,后者用于显示数据),所以Xpath也常用于查找HTML文档中的节点或节点集。 一  路径表达式: 路径以“/”开始     表示找到满足该绝对路径的元素; 路径以//”开始  ...

力扣困难难度 第4题 寻找两个正序数组的中位数

先看一眼题 我的思路: 设置下标i,j分别用于遍历两个数组,初始值均为0,直到找到两个数组中从小到大的第第length/2个数为止结束循环,length为两个数组长度之和。 ·每次比较nums[i]nums[j],如果前者小则i++,否则j++ ·循环结束时,如果count已经达到length/2,则说明已经找到了中位数,[注意:此时有可能正好其中一个数组遍历完了!所以...

[国家集训队]小Z的袜子(莫队)

[国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这NN只袜子从1到NN编号,然后从编号LL到RR(LL 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同...