mysql字段是自动增长类型结果却不是连续的

今天建了一张表,设置其"id"属性为自动增加类型,但是在查看所有数据的时候,却发现"id"的值不是连续增加的。建表的语法如下:

mysql> create table person_list
    -> (
    ->     id        int        auto_increment    unique,
    ->    name    varchar(15)   not null,
    ->    sex     varchar(15)   default "中",
    ->    ID_C    varchar(20)   not null           unique,
    -> vocation   varchar(8),
    ->   salary   float         default 0.0
    -> )charset=utf8;
Query OK, 0 rows affected (0.09 sec)

mysql> desc person_list;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(15) | NO   |     | NULL    |                |
| sex      | varchar(15) | YES  |     | 中      |                |
| ID_C     | varchar(20) | NO   | UNI | NULL    |                |
| vocation | varchar(8)  | YES  |     | NULL    |                |
| salary   | float       | YES  |     | 0       |                |
+----------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql>

之后我往这张表里面添加了一些数据,从中可以看出我所说的问题

mysql> select * from person_list;
+----+-----------+------+--------------------+--------------+---------+
| id | name      | sex  | ID_C               | vocation     | salary  |
+----+-----------+------+--------------------+--------------+---------+
|  1 | 诸葛亮    | 男   | 360428199908230544 | 蜀国         | 8654.56 |
|  2 | 关羽      | 男   | 360428198908230544 | 蜀国         |  86.236 |
|  3 | 貂蝉      | 女   | 361428198908231479 | 美女集团     | 4566.02 |
|  4 | 西施      | 女   | 795410365478901234 | 美女集团     |   124.1 |
|  5 | 雷军      | 男   | 469787036544025984 | 小米公司     |  1784.1 |
|  6 | 乔布斯    | 男   | 456982103749651024 | 苹果公司     | 88888.9 |
|  7 | 李白      | 中   | 147852036978410210 | NULL         |       0 |
| 10 | 乔布儿    | 男   | 456902103749651024 | 苹果公司     | 88888.9 |
| 13 | 乔布儿    | 男   | 056902103749651024 | 苹果公司     | 88888.9 |
+----+-----------+------+--------------------+--------------+---------+
9 rows in set (0.00 sec)

mysql> 

如果我现在再插入一条记录,那么这个新增加的记录的"id"值会是14

mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
Query OK, 1 row affected (0.05 sec)

mysql> select * from person_list;
+----+-----------+------+--------------------+--------------+---------+
| id | name      | sex  | ID_C               | vocation     | salary  |
+----+-----------+------+--------------------+--------------+---------+
|  1 | 诸葛亮    | 男   | 360428199908230544 | 蜀国         | 8654.56 |
|  2 | 关羽      | 男   | 360428198908230544 | 蜀国         |  86.236 |
|  3 | 貂蝉      | 女   | 361428198908231479 | 美女集团     | 4566.02 |
|  4 | 西施      | 女   | 795410365478901234 | 美女集团     |   124.1 |
|  5 | 雷军      | 男   | 469787036544025984 | 小米公司     |  1784.1 |
|  6 | 乔布斯    | 男   | 456982103749651024 | 苹果公司     | 88888.9 |
|  7 | 李白      | 中   | 147852036978410210 | NULL         |       0 |
| 10 | 乔布儿    | 男   | 456902103749651024 | 苹果公司     | 88888.9 |
| 13 | 乔布儿    | 男   | 056902103749651024 | 苹果公司     | 88888.9 |
| 14 | 马云      | 男   | 444989898784562304 | 淘宝公司     | 54588.9 |
+----+-----------+------+--------------------+--------------+---------+
10 rows in set (0.00 sec)

mysql> 

然后我故意输入10条错误的语句(这个表的ID_C值不能重复)

mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'
mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云","男","444989898784562304","淘宝公司",54588.85124);
ERROR 1062 (23000): Duplicate entry '444989898784562304' for key 'ID_C'

之后我又增加1条正确的记录,结果发现该新记录的"ID"值是25,最后一条
跟 倒数第二条 的"ID"值刚好是11-1=10

mysql> insert into person_list (name,sex,ID_C,vocation,salary) value ("马云的儿子","男","444989898784562305","淘宝公司",54588.85124);
Query OK, 1 row affected (0.04 sec)

mysql> select * from person_list;
+----+-----------------+------+--------------------+--------------+---------+
| id | name            | sex  | ID_C               | vocation     | salary  |
+----+-----------------+------+--------------------+--------------+---------+
|  1 | 诸葛亮          | 男   | 360428199908230544 | 蜀国         | 8654.56 |
|  2 | 关羽            | 男   | 360428198908230544 | 蜀国         |  86.236 |
|  3 | 貂蝉            | 女   | 361428198908231479 | 美女集团     | 4566.02 |
|  4 | 西施            | 女   | 795410365478901234 | 美女集团     |   124.1 |
|  5 | 雷军            | 男   | 469787036544025984 | 小米公司     |  1784.1 |
|  6 | 乔布斯          | 男   | 456982103749651024 | 苹果公司     | 88888.9 |
|  7 | 李白            | 中   | 147852036978410210 | NULL         |       0 |
| 10 | 乔布儿          | 男   | 456902103749651024 | 苹果公司     | 88888.9 |
| 13 | 乔布儿          | 男   | 056902103749651024 | 苹果公司     | 88888.9 |
| 14 | 马云            | 男   | 444989898784562304 | 淘宝公司     | 54588.9 |
| 25 | 马云的儿子      | 男   | 444989898784562305 | 淘宝公司     | 54588.9 |
+----+-----------------+------+--------------------+--------------+---------+
11 rows in set (0.00 sec)

mysql> 

所以我估摸着,在插入记录  语句错误的时候  自动增长类型的值会依旧增加,不是只有正确的时候才会+1。

时间: 2024-10-14 13:13:35

mysql字段是自动增长类型结果却不是连续的的相关文章

mysql 约束条件 auto_increment 自动增长起始值 布长 起始偏移量

我们指定一个字段为自动增长,他默认从1开始自动增长,默认值为1,每次增长为1,步长为1 模糊查询 like % 代表任意个数字符 任意字符长度 查看mysql正在使用变量 show variables like “auto_inc%” mysql> show variables like "auto_inc%" ; +--------------------------+-------+ | Variable_name | Value | +-------------------

mysql 约束条件 auto_increment 自动增长目录

mysql 约束条件 auto_increment 自动增长 mysql 约束条件 auto_increment 自动增长起始值 布长 起始偏移量 mysql 约束条件 auto_increment 自动增长 清空表 自动增长情况 mysql 约束条件 auto_increment 自动增长 创建表时设置自增字段 mysql 约束条件 auto_increment 自动增长 修改自增字段起始值 原文地址:https://www.cnblogs.com/mingerlcm/p/10518262.h

mysql——主键自动增长&唯一索引

首先说一下主键和唯一索引的区别 主键:一个数据库的一张表有且仅有一个主键,而且主键不能重复 唯一索引:一个数据库的一张表上唯一索引可以有多个,只是所在唯一索引上的值不能重复,这一点和主键一样 下面我们创建一个有主键有唯一索引的,并且主键是自动增长 create table demo (id int primary key auto_increment, name char(10) unique key, age int); 接下来我们插入数据看看 mysql--主键自动增长&唯一索引 原文地址:

oracle 数据表中实现字段的自动增长

由于一直用的是Mysql数据库,今天刚好心血来潮,想着和Java都是同一个老板出来的oracle自己却不会,说出去会不会有点丢人,故就开始翻资料,看视频搞起来,一步一个脚 印,想着写点什么,就开始从创建表开始吧,好了,废话不多说了,开始上正题创建一个表: User表: create table user(    id number(5,0) not null primary key auto_increment,    deptid number(5,0) not null,    userna

mysql字段值自动更新时间

在生产环境中可能会出现,项目已经上线,但是更新时间的字段没有赋值,也就是说这条数据每次更新时,更新的时间依旧是null.为了解决这个问题,一般是将程序更新数据时,把更新时间给更新了.但是上线后更改程序需要重新升级,挺麻烦.现在可以通过修改更新时间的字段,来保证每次更新数据时,数据的更新时间自动更新. 在一个已经建好的表执行如下sql即可完成更新时间自动更新: ALTER TABLE checker_barcode MODIFY COLUMN update_time TIMESTAMP NOT N

程序员的SQL经典笔记1_自动增长字段

自动增长字段在设计数据库的时候,有时需要表的某个字段是自动增长的,最常使用自动增长字段的就是表的主键,使用自动增长字段可以简化主键的生成.不同的DBMS中自动增长字段的实现机制也有不同,下面分别介绍. MYSQL 中设定一个字段为自动增长字段非常简单,只要在表定义中指定字段为AUTO_INCREMENT即可.例子: create table t_student ( t_id int primary key auto_increment, t_name varchar(50), t_age int

2-16 MySQL字段约束-索引-外键

一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) not null,pass varchar(20) not null); mysql> insert into worker values(1,'HA','123456'); mysql> insert into worker values(1,'LB',null); ERROR 1048 (2

mysql把主键定义为自动增长标识符类型

分享下mysql中如何把主键定义为自动增长标识符类型. 1.把主键定义为自动增长标识符类型在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id int auto_increment primary key notnull, name varchar(15)); insert into customers(name) values("name1"),("name2");

Mysql,SqlServer,Oracle主键自动增长的设置

1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如:   customers(id  auto_increment    , name (  customers(name)  id  customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值.最后查询表中id字段,查询结果为: 由此可见,一旦把id设为auto_increment类型,mys