在使用MYSQL数据库时,无法设置AUTO_INCREMENT从0开始自增,之后查询了相关资料整理。

快速概览

AUTO_INCREMENT列满足条件

在不同数据库引擎下所具有的特征

解决AUTO_INCREMENT从1自增

AUTO_INCREMENT列必须满足以下情况:

每个表中必须只有一个AUTO_INCREMENT列,且其属性应是整数数据类性(AUTO_INCREMENT也支持浮点型数据类性,但很少用)。

列必须拥有NOT NULL约束条件,如果没有设置,则MYSQL默认加上NOT NULL。

列必须建立索引。常见使用PRIMARY KEY或UNIQUE,也可以不是唯一索引。

MyISAM表的AUTO_INCREMENT列

MyISAM存储引擎中AUTO_INCREMENT列具有以下特征:

MyISAM中的列是单调的。在一个自动生成的的序列里,其顺序是严格递增的,并且在行被删后,不能复用。比如当前序列为100,如果删除包含该列的值,则新添加的依然为101,而不是100.

如果使用TRUNCATE TABLE清空表,则计数器会被重置为1开始。

如果序列里使用了复合索引来生成多个序列,则从序列顶端删除的值可以被重用。

可以在建表的时候使用AUTO_INCREMENT=n,来显示的设置初始值。可以使用alter table语句更改计数器。例如:

cretae table myisamdemo(

id int unsigned not null auto_increment,

primary key(id)

)engine=MyISAM auto_increment=100;

MEMORY 表 的 AUTO_ INCREMENT 列

MEMORY 表 的 AUTO_ INCREMENT 列具有以下特征:

在create table语句里可以使用AUTO_INCREMENT=n显示设置初始值,且可以使用alter table 更改计数器的值。如:

alter table myisamdemo AUTO_INCREMENT=1001;

从顶端删除的的值一般不能被复用。

如果用truncate table 清空表,则序列被重置,并重新从1开始编号。

表里不能使用复合索引生成多个独立的序列。

InnoDB表的AUTO_INCREMENT列

InnoDB表的AUTO_INCREMENT列具有以下特征:

在create table语句中可以使用AUTO_INCREMENT=n指定初始值,且可以使用alter table 表名 AUTO_INCREMENT=m,修改序列值。

通常从序列顶端删除的值不能复用。如果使用truncate table清空表,序列被重置,则序列计数器从1开始计数。

由于InnoDB是计数器是在内存中维护的-并未保存在数据表内,所以如果删除序列顶端的值,且重新启动服务器则此时序列值是可以重用的。且重启服务器还将取消在create table或alter table语句使用AUTO_INCREMENT设置的效果。

如果生成AUTO_INCREMENT的事务被回滚,则序列可能出现断裂。

在表里不能使用复合索引生成多个独立序列。

在mysql中对于设置了自增属性auto_increment的字段自增值是从1开始的,写入0会被当做null值处理从而写入当前最大值的下一个值(即表示定义中auto_increment的值)。

如果需要修改自增值的起始位置可以通过 " alter table table_name(表名) auto_increment=xxxx; "进行修改,但是这个值必须比当前表内数据的最大值要大,否则修改不会生效。

如果需要修改自增值从0开始而不是从1开始,可以设置线程级别的参数" set sql_mode='NO_AUTO_VALUE_ON_ZERO' ; "来实现 ( 可小写 )

例如 :

创建表时可以这样写:

set sql_mode='no_auto_value_on_zero';

CREATE TABLE auth_function (

id BIGINT(20) AUTO_INCREMENT NOT NULL,

name varchar(64) NOT NULL,

parent_id BIGINT(20) NOT NULL,

url varchar(128) NOT NULL,

serial_num int NOT NULL,

accordion int NOT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql auto increment 插入_MySQL里AUTO_INCREMENT表里插入0值的问题相关推荐

  1. mysql 循环体 如何测试_mysql里如何循环插入数据,进行测试

    比如从现在开始一直循环到后年,比如设 置8根管线,一直循环下去进行数据叠加,下面是C#代码,不知道怎么写下去了 private void button1_Click(object sender, Ev ...

  2. mysql auto increment offset_MySQL auto_increment_increment,auto_increment_offset 用法

    MySQL中对于表上ID自增列可以在创建表的时候来指定列上的auto_increment属性:等同于SQL server中的identity属性:Oracle则是通过Sequence方式来实现.在My ...

  3. mysql insert 自增_MySQL自增列插入0值的解决方案

    在将数据库从MSSQL迁移到MySQL的过程中,基于业务逻辑的要求,需要在MySQL的自增列插入0值.在MSSQL中是这样完成的: string sql;sql = " set identi ...

  4. mysql 存在也插入_Mysql 不存在则插入,存在则更新

    一条mysql教程 存在该记录则更新,不存在则插入记录的sql INSERT table (auto_id, auto_name) values (1, 'yourname') ON DUPLICAT ...

  5. mysql获取自增_mysql 获取自增id的值的方法

    原生jdbc方式: Statement.getGeneratedKeys() 示例: Statement stmt = null; ResultSet rs = null; try { // // C ...

  6. mysql排插问题_MySQL一次数据插入故障记录

    某天突然收到报警,数据库大量事务等待,进到数据库后发线大量的插入操作被阻塞,且都是同一个表的. 通过 show engine innodb status 发现插入操作都是在等待索引 idx_creat ...

  7. mysql 函数怎样创建_mysql里怎样创建函数

    mysql里创建函数的方法: 一.查看创建函数的功能是否开启: mysql> show variables like '%func%'; +--------------------------- ...

  8. mysql字段分隔符拆分_MySQL里实现类似SPLIT的分割字符串的函数

    下边的函数,实现了象数组一样去处理字符串. 一,用临时表作为数组 复制代码 代码如下: create function f_split(@c varchar(2000),@split varchar( ...

  9. mysql数据自定义随机_MySQL 利用事务自定义插入随机数据

    -- -----------------声明全局变量--------------- declare str varchar(100) default '2010'; declare n int def ...

最新文章

  1. Node.js v8.0.0 带来了哪些主要新特性
  2. python定义字典列表_[Python基础]五、列表、元组和字典
  3. filesystemwatch java_C#方法的委托和java中的回调
  4. linux常用调试,linux下gdb常用的调试命令
  5. tensorflow版本及其对应环境
  6. centos7新机器需要安装的。。。。。。
  7. JS控制图片滚动的效果
  8. 创建对象、原型、原型链
  9. 初学jQuery之选择器
  10. ddt-TypeError: test_add_department_1() missing 3 required positional arguments
  11. 信息抽取 | 72篇论文梳理:涉及NER、复杂关系、小样本、文档级、多模态、开放域抽取...
  12. 《算法竞赛入门经典》习题及反思 -2
  13. S7-200SMART案例分析——运动控制之步进选型(一)
  14. Python学习第一弹——Python环境搭建
  15. java mrp模拟器_MRP模拟器(冒泡官方版)好用吗_MRP模拟器(冒泡官方版)怎么样_MRP模拟器(冒泡官方版)3.811用户评论-AppChina应用汇...
  16. Eclipse启动出错误:An error has occurred.See the log file。。。。
  17. CSS 选择所有子元素添加样式
  18. 4pm 方法操datagrid
  19. 交换机连接路由器计算机联网,交换机上连接路由器_连上路由器(交换器)后部分电脑无法上网的解决方法_交换机上接路由器...
  20. IGBT的双脉冲测试实验

热门文章

  1. 密码学——对称加密加密模式
  2. 【C语言小游戏】扫雷
  3. Linux 内核配置项详解 myimx6
  4. 淘宝旺旺号转userid 和 uid 的接口方法
  5. hdu-2072 单词数(“水”解法)
  6. yocto 下载代理
  7. iOS - CAEmitterlayer粒子发射器
  8. 金蝶osf接口开发_调用OSF接口取待办任务总数报错!急
  9. SCCM部署系统任务序列失败错误代码0x80070002
  10. Linux常用指令/知识点