史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」
自动增长
自动增长:auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值。
自增长通过跟主键进行搭配使用,其特点为:
任何字段要做自增长,前提其本身必须是一个索引,即key栏有值;
自增长字段必须是数字(整型);
每张表最多有一个自增长字段。
执行如下 SQL 语句,进行测试:
-- 自增长示例
create table my_auto(
id int primary key auto_increment,
name varchar(20) not null
)charset utf8;
使用自增长
当自增长给定的值为null或者默认值的时候,就是触发自动增长。
-- 触发自增长
insert into my_auto (name) values('Charies');
insert into my_auto values(null,'Guo');
insert into my_auto values(default,'ChariesGuo');
如上图所示,自增长的第一个元素默认是1,自增长每次都是自增1。此外,如果自增长对应的字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长,即从取该字段的最大值+1.
那么,如何确定下一次自增长的数值是什么呢?简单,咱们可以通过查看表的创建语句看到。
-- 查看表的创建语句
show create table my_auto;
如上图所示,显然在咱们之前插入的 3 条记录之后,下一次自增长是4,符合咱们的结论。
修改自增长
自增长如果是涉及到字段改变,就必须先删除自增长,然后再增加自增长,因为每张表只能有一个自增长字段。
如果修改当前自增长字段已经存在的值,则只能修改比当前已有自增长字段中的最大值更大,不能更小,因为更小不生效。
基本语法:alter table + 表名 + auto_increment = 值;
执行如下 SQL 语句,进行测试:
-- 修改自增长测试
alter table my_auto auto_increment = 2;
如上图所示,当咱们修改自增长小于当前自增长字段中的最大值时,虽然显示 SQL 语句执行成功,但实际上并没有修改成功。下面,在执行如下 SQL 语句,进行测试:
-- 修改自增长测试
alter table my_auto auto_increment = 5;
如上图所示,显然当咱们修改自增长大于当前自增长字段中的最大值时,修改成功。
在这里,咱们不妨思考一下,为什么自增长是从1开始呢?为什么每次都自增1呢?虽然现在咱们不知道是什么原因导致上面的表示形式,但是咱们知道,所有系统的表现(如字符集、校对集)都是由系统内部的变量进行控制的,因此咱们可以查看自增长对应的变量:
基本语法:show variables like 'auto_increment%';
-- 查看自增长变量
show variables like 'auto_increment%';
如上图所示,其中auto_increment_increment表示步长,auto_increment_offset表示初始值.
因此,咱们可以通过修改上面的两个变量实现不同的效果,但是需要注意的是:修改是会话级别,并且修改的是整个数据库,而不是单张表。
基本语法:set auto_increment_increment = 值;
执行如下 SQL 语句,进行测试:
-- 修改自增长步长
set auto_increment_increment = 5;
insert into my_auto values (null,www.dasheng178.com'Guobinhit');
如上图所示,咱们已经修改成功!接下来,执行如下 SQL 语句,进行测试:
-- 插入测试数据
insert into my_auto values (null,'www.gcyL157.com Guobinhit');
insert into my_auto values (www.fengshen157.com/ default,'Guobinhit');
如上图所示,咱们插入的第一个Guobinhit的id值竟然是6,第二个Guobinhit的id值倒是在6的基础上增加了5为11正常。这个现象产生的原因是:咱们之前的修改会导致系统产生一个误差,从初始值1开始计算加5,因此第一个Guobinhit的id值是6.
不过说实话,修改自增长并没有什么实际的意义,在此只是想让大家知道:自增长的初始值和步长都是可以修改的而已。
删除自增长
自增长是字段的一个属性,因此可以通过modify来进行修改。想要删除自增长的话,只需要保证字段没有auto_increment即可。
基本语法:alter table + 表名 + modify + 字段 + 类型;
执行如下 SQL 语句,进行测试:
-- 删除自增长
alter table my_auto modify www.michenggw.com id int primary key;
如上图所示,呃,好吧,出错啦!这是因为表my_auto之前已经定义了主键,所以在执行上述 SQL 语句的时候,系统会认为咱们想要定义多个主键,自然就要报错啦!解决方法就是,去掉上述 SQL 语句中的primary key即可。
如上图所示,显然咱们已经成功删除自增长啦!
温馨提示:符号+表示连接的意思。
———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————
史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」的更多相关文章
- 《史上最简单的MySQL教程》系列分享专栏
<史上最简单的MySQL教程>系列分享专栏 <史上最简单的MySQL教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read ...
- 整理:史上最简单的 MySQL 教程
1 前言 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成 ...
- [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)(Finchley版本)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f5-zuul/ 本文出自方志朋的博客 在微服务架构中,需要几 ...
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...
- 史上最简单的 SpringCloud 教程
史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)史上最简单的Spri ...
- 史上最简单的 SpringCloud 教程 | 终章
https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...
- 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)
转载请标明出处: 原文首发于 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f10-eureka/ 本文出自方志朋的博客 文章 史上最简单 ...
- 史上最简单的 GitHub 教程
史上最简单的 GitHub 教程 温馨提示:本系列博文已经同步到 GitHub,如有需要的话,欢迎大家到「github-tutorial」进行Star和Fork操作! 1 简介 GitHub 是一个面 ...
随机推荐
- L010小结后自考题
. 查询2号分区的inode和block的数量和尺寸 . 在lcr文件夹下创建一个a文件夹,然后进入文件夹中,创建3个3层目录,5个1层目录,5个文件 . 滤出a文件夹下的所有一级目录(4种方法) . ...
- 关于BLOB/TEXT字段存储设计及性能的简单研究
简单研究了一下BLOB/TEXT字段对数据库性能的影响,得到一个大概的结论:(未验证) 无论MySQL还是MSSQL,都可以通过把BLOB/TEXT数据存储在行外的方式提高性能 把BLOB/TEXT字 ...
- HTML 常见的 DOCTYPE 声明
<!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关 ...
- JEMTER简单的测试计划
测试计划一 1)测试网站:http://www.geneedu.cn/和http://supu01.1688.com/ 2)测试目的是该网站在负载达到20 QPS 时的响应时间. 备注: QPS : ...
- 程序迭代时测试操作的要点(后端&前端)
今晚直播课内容简介,视频可点击链接免费听 <程序迭代时测试操作的要点(后端&前端)> ===== 1:迭代时后台涉及的操作有哪些?如何进行 a.更新war包:用于访问web\app ...
- MySQL☞关联查询
关联查询:所需要的数据来源于多张表,通过表的连接查询(关联查询)来查询多张表中的数据 格式: select 别名1 . */列名 , 别名2 . */列名 from 表名1 别名1 , 表名2 别 ...
- java实现网页截图
使用工具 java+selenium+phantomjs /chromedriver /firefox 1.分别是 phantomjs插件 google截图插件 和 firefox火狐浏览器截图插件2 ...
- 数数字 (Digit Counting,ACM/ICPC Dannang 2007 ,UVa1225)
题目描述:算法竞赛入门经典习题3-3 #include <stdio.h> #include <string.h> int main(int argc, char *argv[ ...
- typescript 学习记录
类型判断: typeJudge() { //typeof 用来判断变量类型 var s: string = 'egret'; var isString: boolean = typeof s === ...
- 基于AdaBoost算法——世纪晟结合Haar-like特征训练人脸检测识别
AdaBoost 算法是一种快速人脸检测算法,它将根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高. 系统在技术上的三个贡献: 1.用简单的Haa ...