博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL 插入数据主键id不连续
阅读量:4141 次
发布时间:2019-05-25

本文共 1394 字,大约阅读时间需要 4 分钟。

      转载地址:

      

 

前提情况:

 

结构

mysql> desc tt1;

+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   | UNI | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

 

内容

mysql> select * from tt1;

+----+------+
| id | name |
+----+------+
|  1 | aaa  |
+----+------+
1 row in set (0.00 sec)

 

错误的插入重复记录

mysql> insert into tt1 (name)values('aaa');
ERROR 1062 (23000): Duplicate entry 'aaa' for key 'name'

 

修改后重新操作

mysql> insert into tt1 (name)values('bbb');
Query OK, 1 row affected (0.00 sec)

 

 

再次看内容

mysql> select * from tt1;

+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  3 | bbb  |
+----+------+
2 rows in set (0.00 sec)
问题:id不是我们需要的2,而是3

 

原因:错误的插入操作,已经影响了自增+1的操作,
     命令是正确的,而数据不符合表要求.
     只要命令不错,自增+1就运行,没毛病.

 

解决办法
每次插入前,先设置auto_increment=1
也就是运行两条命令完成正确操作

 

alter table tt1 auto_increment=1;
        insert into tt1 (name)values('ccc');

 

执行情况如下:    

mysql> alter table tt1 auto_increment=1;

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> insert into tt1 (name)values('ccc');
Query OK, 1 row affected (0.00 sec)

 

mysql> select * from tt1;

+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  3 | bbb  |
|  4 | ccc  |
+----+------+
3 rows in set (0.00 sec)t 

 

你可能感兴趣的文章
如何用matlab批量新建和删除文件夹?
查看>>
如何用matlab索引文件夹中的所有.txt文件?
查看>>
matlab中movefile和copyfile的重要用途
查看>>
matlab中fprintf, fscanf, fwrite, fread函数的用法
查看>>
利用matlab实现图的绘制、保存、关闭
查看>>
matlab中如何实现对不同类型对象(类型也可相同)的索引?(很重要的用法)
查看>>
如何实现四舍五入操作?
查看>>
Why do Java programmers wear glasses?
查看>>
这个程序的结果究竟是多少呢?
查看>>
matlab中如何删除向量和矩阵中的元素?
查看>>
snprintf函数的用法
查看>>
stderr 和 stdout有什么区别?
查看>>
为什么delete p;后最好加上p = NULL; ? (浅谈内存泄露和内存过度释放)
查看>>
如何从JM8.6的编码端和解码端提取滤波前的像素值?
查看>>
main函数中的argc和argv是什么意思?
查看>>
malloc函数和calloc函数的一个小区别
查看>>
#ifdef WIN32有什么作用?
查看>>
ftell函数的用法(用于获取指针位置)
查看>>
fseek函数的用法(用于设定指针位置)
查看>>
利用fseek和ftell求文件的长度(字节数)
查看>>