Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 交易&x2B;选择。。。要更新。。。跳过索引_Mysql_Sql_Indexing_Transactions_Locking - Fatal编程技术网

Mysql 交易&x2B;选择。。。要更新。。。跳过索引

Mysql 交易&x2B;选择。。。要更新。。。跳过索引,mysql,sql,indexing,transactions,locking,Mysql,Sql,Indexing,Transactions,Locking,在做了一个实验来回答一个不同的问题之后,我注意到我的表的索引列有一些有趣的地方 在我的实验中,我有两个条件。在一种情况下,autocommit=FALSE,在另一种情况下,autocommit=TRUE。我有两个会话连接到服务器,并在这些条件下尝试了会话#1启动事务/选择进行更新和会话#2尝试选择和插入等各种组合。重要提示:会话#1启动的所有事务都已回滚,未提交 回顾我的结果,我注意到当第一个会话在事务中并且选择了更新时,会话2(当然在第一个会话完成其事务后)所做的插入将其索引提前了2。在会话2

在做了一个实验来回答一个不同的问题之后,我注意到我的表的索引列有一些有趣的地方

在我的实验中,我有两个条件。在一种情况下,
autocommit=FALSE
,在另一种情况下,
autocommit=TRUE
。我有两个会话连接到服务器,并在这些条件下尝试了会话#1启动事务/选择
进行更新
和会话#2尝试选择和插入等各种组合。重要提示:会话#1启动的所有事务都已回滚,未提交

回顾我的结果,我注意到当第一个会话在事务中并且选择了更新
时,会话2(当然在第一个会话完成其事务后)所做的插入将其索引提前了2。在会话2的所有其他插入中,索引仅前进1。这包括由于会话1为UDPATE选择了
(顺便说一句,当自动提交关闭时,这是可能的)而被迫等待的插入

在不损失一两个小时进行测试的情况下,我希望有人能解释一下指数是如何上升2的。我最好的猜测是:我假设索引+1是为会话#1保留的,而会话#1是回滚而不是提交的,而索引+2是为会话#2保留的,因为它的请求是在索引+1被保留时传入的。会话#1回滚后,索引+1中没有任何内容,会话#2插入到已为其保留的索引索引+2中

这是真的吗?如果是的话,我担心如果许多会话同时请求更新,然后不提交,整个索引补丁可能会被闲置…我能防止这种情况吗?如果发生,我能补救吗


提前谢谢。

通过
索引
,您的意思是
自动编号
?我假设“索引”是指自动递增的主键。(索引是正式定义的,并不总是适用于主键。)但真正的问题是“你为什么在意?”自动索引间隙不会造成任何伤害,除了美观。