mysql中自增auto_increment功能的相关设置及问题

 更新时间:2012年12月11日 16:30:53   作者:  
mysql中的自增auto_increment功能相信每位phper都用过,本文就为大家分享一下mysql字段自增功能的具体查看及设置方法

mysql中的自增auto_increment功能相信每位phper都用过,也都知道如何设置字段为自增字段,但并不是所有phper都知道auto_increment的起始值和递增量是如何设置的!本文就为大家分享一下mysql字段自增功能的具体查看及设置方法。

涉及知识介绍
mysql服务器维护着2种mysql的系统参数(系统变量):全局变量(global variables)和会话变量(session variables)。它们的含义与区别如其各占的名称所示,session variables是在session级别的,对其的变更只会影响到本session;global variables是系统级别的,对其的变更会影响所有新session(变更时已经存在session不受影响)至下次mysql server重启动。注意它的变更影响不能跨重启,要想再mysql server重启时也使用新的值,那么就只有通过在命令行指定变量选项或者更改选项文件来指定,而通过SET变更是达不到跨重启的。
每一个系统变量都有一个默认值,这个默认值是在编译mysql系统的时候确定的。对系统变量的指定,一般可以在server启动的时候在命令行指定选项或者通过选项文件来指定,当然,大部分的系统变量,可以在系统的运行时,通过set命令指定其值。

首先需要介绍一下查看mysql中全局变量的方法

复制代码 代码如下:

show variables like '%xxx%'; <==> show session variables like '%xxx%'; //session会话变量
show global variables like '%xxx%'; //全局变量

例如查看与auto_increment相关的变量方法如下:
复制代码 代码如下:

show variables like '%auto_increment%';


一般情况结果为
variables_name                  value
auto_increment_increment                 1 
auto_increment_offset                 1

第一个变量名 auto_increment_increment 就是指 字段一次递增多少;
第二个变量名 auto_increment_offset 指 自增字段的起始值。
比如,有个表test,字段id为主键,自增;
如果auto_increment_offset=1 , 并且auto_increment_increment=1,那么向表中插入第一条数据时,则该条数据的id=1,第二条id=2,第三条id=3以此类推……
如果auto_increment_offset=2 , 并且auto_increment_increment=10,那么向表中插入第一条数据时,则该条数据的id=2,第二条id=12,第三条id=22以此类推……
注意:如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值被忽略。

了解如何查看及其含义以后,剩下的就是如何修改这些变量的值了,修改也非常简单,语句格式如下:
set auto_increment_increment=10
就这么简单就把变量auto_increment_increment的值设置成了10
—————————————————————————————————————
补充一个看似简单但又不是很简单的问题
问:如果有一张表,里面有个字段为id的自增主键,当已经向表里面插入了10条数据之后,删除了id为8,9,10的数据,再把mysql重启,之后再插入一条数据,那么这条数据的id值应该是多少,是8,还是11?
答:如果表的类型为MyISAM,那么是11。如果表的类型为InnoDB,则id为8。
这是因为两种类型的存储引擎所存储的最大ID记录的方式不同,MyISAM表将最大的ID记录到了数据文件里,重启mysql自增主键的最大ID值也不会丢失;
而InnoDB则是把最大的ID值记录到了内存中,所以重启mysql或者对表进行了OPTIMIZE操作后,最大ID值将会丢失。

相关文章

  • 从MySQL全库备份中恢复某个库和某张表的方法

    从MySQL全库备份中恢复某个库和某张表的方法

    这篇文章主要介绍了从MySQL全库备份中恢复某个库和某张表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySQL数据库开发的36条原则(小结)

    MySQL数据库开发的36条原则(小结)

    这篇文章主要介绍了MySQL数据库开发的36条原则(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • PHP MYSQL注入攻击需要预防7个要点

    PHP MYSQL注入攻击需要预防7个要点

    这篇文章主要介绍了PHP MYSQL开发中,对于注入攻击需要预防的7个要点,大家需要注意了
    2013-11-11
  • 浅析mysql索引

    浅析mysql索引

    数据库索引是一种数据结构,目的是提高表的操作速度,下面通过本文给大家分享mysql索引的相关知识,感兴趣的朋友一起看看吧
    2017-10-10
  • Mysql建表与索引使用规范详解

    Mysql建表与索引使用规范详解

    本篇文章是对Mysql建表和索引使用规范进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • mysql-8.0.16 winx64的最新安装教程图文详解

    mysql-8.0.16 winx64的最新安装教程图文详解

    最近刚学习数据库,首先是了解数据库是什么,数据库、数据表的基本操作,这就面临了一个问题,mysql的安装,我这里下载的是64位的,基于Windows的,需要的朋友可以参考下
    2019-06-06
  • MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究

    MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究

    这篇文章主要介绍了MySQL中无GROUP BY情况下直接使用HAVING语句的问题探究,同时探究了该情况下MAX与MIN功能的使用情况,需要的朋友可以参考下
    2015-05-05
  • mysql 8.0.21 安装配置方法图文教程

    mysql 8.0.21 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.21 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 新装MySql后登录出现root帐号提示mysql ERROR 1045 (28000): Access denied for use的解决办法

    新装MySql后登录出现root帐号提示mysql ERROR 1045 (28000): Acc

    这篇文章主要介绍了新装MySql后登录出现root帐号提示mysql ERROR 1045 (28000): Access denied for use的解决办法,需要的朋友可以参考下
    2017-01-01
  • 一次神奇的MySQL死锁排查记录

    一次神奇的MySQL死锁排查记录

    这篇文章主要给大家介绍了一次神奇的MySQL死锁排查的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03

最新评论