Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL正在跳过自动增量值_Mysql_Sql_Database_Database Design_Auto Increment - Fatal编程技术网

MySQL正在跳过自动增量值

MySQL正在跳过自动增量值,mysql,sql,database,database-design,auto-increment,Mysql,Sql,Database,Database Design,Auto Increment,在“我的用户”表中,只有3个字段 id (primary key, auto increment), username (not null, unique) and password(not null). 当我尝试插入一个值为“test”和“123”的行时,我得到了1作为主键,然后我再次尝试使用相同的值,得到了键“username”的重复项,正如预期的那样,然后我尝试了“test1”和“123”,得到了3作为主键,跳过了2,为什么它会显示这种行为 MySQL版本是5.7.27。这是一个:

在“我的用户”表中,只有3个字段

id (primary key, auto increment), 
username (not null, unique) and 
password(not null). 
当我尝试插入一个值为“test”和“123”的行时,我得到了1作为主键,然后我再次尝试使用相同的值,得到了键“username”的重复项,正如预期的那样,然后我尝试了“test1”和“123”,得到了3作为主键,跳过了2,为什么它会显示这种行为

MySQL版本是5.7.27。

这是一个:

“丢失”自动增量值和序列间隙

在所有锁定模式(0、1和2)中,如果生成自动增量值的事务回滚,则这些自动增量值将“丢失”。为自动增量列生成值后,无论“类似插入”语句是否完成,以及包含的事务是否回滚,都无法回滚该值。这样丢失的值不会被重用。因此,表的自动增量列中存储的值可能存在间隙

在您的用例中,在检查
username
上的唯一约束之前,自动增量被分配一个新值。然后约束检查失败,事务回滚,在序列中留下一个间隙

除可能导致自动增量序列中出现间隙外,还有其他各种情况(例如使用
INSERT…IGNORE
INSERT…ON DUPLICATE KEY
语法时),本质上与事务的隐式或显式回滚相关


底线:不要假设aut_增量键是连续的。所保证的是唯一性,并且在某种程度上是不断增加的数字。

请提供该表的定义。如果所有约束都正常,但插入失败,则可以使用“替换”而不是“替换”INSERT@Sony,为了补充GMB提到的底线,也不要试图“修复”你的自动增量是连续的,这也是一个很大的禁忌,因为届时可能会发生错误/问题,如难以调试的竞争条件。。