史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」

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

自动增长

自动增长:auto_increment当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值

自增长通过跟主键进行搭配使用,其特点为:

  • 任何字段要做自增长,前提其本身必须是一个索引,即key栏有值;
  • 自增长字段必须是数字(整型);
  • 每张表最多有一个自增长字段。

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

-- 自增长示例
create table my_auto(
	id int primary key auto_increment,
	name varchar(20) not null
)charset utf8;
1

使用自增长

当自增长给定的值为null或者默认值的时候,就是触发自动增长。

-- 触发自增长
insert into my_auto (name) values('Charies');
insert into my_auto values(null,'Guo');
insert into my_auto values(default,'ChariesGuo');
2

如上图所示,自增长的第一个元素默认是1,自增长每次都是自增1。此外,如果自增长对应的字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长,即从取该字段的最大值+1.

那么,如何确定下一次自增长的数值是什么呢?简单,咱们可以通过查看表的创建语句看到。

-- 查看表的创建语句
show create table my_auto;
3

如上图所示,显然在咱们之前插入的 3 条记录之后,下一次自增长是4,符合咱们的结论。

修改自增长

自增长如果是涉及到字段改变,就必须先删除自增长,然后再增加自增长,因为每张表只能有一个自增长字段。

如果修改当前自增长字段已经存在的值,则只能修改比当前已有自增长字段中的最大值更大,不能更小,因为更小不生效。

  • 基本语法:alter table + 表名 + auto_increment = 值;

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

-- 修改自增长测试
alter table my_auto auto_increment = 2;
4

如上图所示,当咱们修改自增长小于当前自增长字段中的最大值时,虽然显示 SQL 语句执行成功,但实际上并没有修改成功。下面,在执行如下 SQL 语句,进行测试:

-- 修改自增长测试
alter table my_auto auto_increment = 5;
5

如上图所示,显然当咱们修改自增长大于当前自增长字段中的最大值时,修改成功。

在这里,咱们不妨思考一下,为什么自增长是从1开始呢?为什么每次都自增1呢?虽然现在咱们不知道是什么原因导致上面的表示形式,但是咱们知道,所有系统的表现(如字符集、校对集)都是由系统内部的变量进行控制的,因此咱们可以查看自增长对应的变量:

  • 基本语法:show variables like 'auto_increment%';
-- 查看自增长变量
show variables like 'auto_increment%';
6

如上图所示,其中auto_increment_increment表示步长auto_increment_offset表示初始值.

因此,咱们可以通过修改上面的两个变量实现不同的效果,但是需要注意的是:修改是会话级别,并且修改的是整个数据库,而不是单张表。

  • 基本语法:set auto_increment_increment = 值;

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

-- 修改自增长步长
set auto_increment_increment = 5;
insert into my_auto values (null,'Guobinhit');
7

如上图所示,咱们已经修改成功!接下来,执行如下 SQL 语句,进行测试:

-- 插入测试数据
insert into my_auto values (null,'Guobinhit');
insert into my_auto values (default,'Guobinhit');
8

如上图所示,咱们插入的第一个Guobinhitid值竟然是6,第二个Guobinhitid值倒是在6的基础上增加了511正常。这个现象产生的原因是:咱们之前的修改会导致系统产生一个误差,从初始值1开始计算加5,因此第一个Guobinhitid值是6.

不过说实话,修改自增长并没有什么实际的意义,在此只是想让大家知道:自增长的初始值和步长都是可以修改的而已。

删除自增长

自增长是字段的一个属性,因此可以通过modify来进行修改。想要删除自增长的话,只需要保证字段没有auto_increment即可

  • 基本语法:alter table + 表名 + modify + 字段 + 类型;

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

-- 删除自增长
alter table my_auto modify id int primary key;
9

如上图所示,呃,好吧,出错啦!这是因为表my_auto之前已经定义了主键,所以在执行上述 SQL 语句的时候,系统会认为咱们想要定义多个主键,自然就要报错啦!解决方法就是,去掉上述 SQL 语句中的primary key即可。

10

如上图所示,显然咱们已经成功删除自增长啦!


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


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

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

如有侵权,请联系 zhuanlan_guanli@qq.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

区块链安全 | 修饰器(modifier)相关漏洞分析

修饰器(modifier)可以改变函数的行为,例如作为前置的检测条件。同时修饰器具有可继承属性,可以由派生合约中的定义覆盖。本次BUGX.IO区块链安全课堂给大...

682
来自专栏FSociety

Python使用itchat获取微信好友

最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息。

662
来自专栏Python攻城狮

Ajax-数据异步交互1.Ajax简介2.AJAX 实例

AJAX = 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网...

753
来自专栏SAP最佳业务实践

SAP最佳业务实践:MM–管道资源物料的采购(903)-2业务处理

3 流程概览表 步骤名称业务条件角色事务­代码预期结果过帐管道资源物料的发货发货已在系统中创建仓库管理员MIGO_GI根据计划协议过帐收货从管道资源提取收到发票...

3296
来自专栏SAP最佳业务实践

SAP最佳业务实践:使用看板的生产制造(233)-11重复制造反冲

1、MFBF重复制造反冲 此活动在单个步骤中执行多个活动,如产成品的收货、组件物料的反冲、成本到成本收集器的过帐以及物料和会计凭证的创建。 反冲时可能会出现错误...

3085
来自专栏贺嘉的专栏

如何用Baas快速在腾讯云上开发小程序之系列4:实现客户侧商品列表、商品详情页程序

本文将分享如何在腾讯云上实现小程序的商品展示和数据库查询操作。通过实现商品列表、商品详情页程序,熟练掌握云端数据表查询操作,包括掌握小程序调试方法、掌握小程序操...

7760
来自专栏数据小魔方

Xcelsius(水晶仪表)系列5——统计图综合运用

今天继续跟大家分享水晶仪表系列的第5篇——统计图的综合运用。 本例是一个通过展现某银行前八年的存款储蓄以及贷款数据,通过预计后两年的存款储蓄增长率、贷款增长率等...

31711
来自专栏web前端

04 响应式

          2.1 媒体有覆盖性(当width: 1200px 时,符合下面两个条件,但是靠媒体样式的覆盖性,所以会采用第二个样式)

710
来自专栏纯洁的微笑

小明历险记:规则引擎Drools教程一

733
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–项目装配(240)-17子装配的零件生产

子装配的零件生产 子装配的库存采购无 QM 的采购 (130) 用于制造最终产品的所有原材料(除了长提前期组件)必须已在库存中。 在实际业务情况中,原材料通常从...

3424

扫描关注云+社区