MySQL Auto_increment由2乘2


8

前几天,我安装了MySQL Workbench,访问了公司的数据库,并为自己创建了一个可使用的表。到目前为止,一切都很好。问题是,我注意到我的auto_increment由2递增2。例如:

ID    NAME
1     Paul
3     Jack
5     Louis
7     John
...

当我这样做时SHOW VARIABLES LIKE 'auto_inc%'

'auto_increment_increment', '2'
'auto_increment_offset', '1'

所以我尝试通过以下方式设置auto_increment_increment为1:

SET @@auto_increment_increment=1

并再次验证后,SHOW VARIABLES LIKE 'auto_inc%'我确认结果“有效”:

'auto_increment_increment', '1'
'auto_increment_offset', '1'

但是我的ID 仍以2乘2递增。

第一次这样做,它运行良好,然后我关闭了MySQL Workbench,意识到再次打开它时,它又auto_increment_increment被设置为2。现在,我尝试再次执行此操作,但是它似乎不再起作用。

有人可以帮我吗?

谢谢你们。


2
在不完全了解我们公司的环境为何设置此值的情况下,我会谨慎地更改此值。例如,这是在多主复制设置中运行时要更改的公共变量。另外,我们可以为要测试的表获取SHOW CREATE TABLE语句吗(在生产环境中进行测试也是个坏主意,顺便说一句)
Derek Downey

我认为这应该是一个答案。或添加到现有的,无论您喜欢什么。对于想要保留其工作的DBA而言,最好的措施是谨慎采取行动,或者根本不采取任何行动。
ypercubeᵀᴹ

Answers:


7

使用的前缀:

SET @@auto_increment_increment=1;

是相同的:

SET @@SESSION.auto_increment_increment=1;

修改此设置时,它仅在您当前的会话中有用。

要进行更永久的修复,请尝试:

SET GLOBAL auto_increment_increment=1;

是相同的:

SET @@GLOBAL.auto_increment_increment=1;

呵呵,我以为@@是会话属性。在mysql手册中:“要明确表示变量是会话变量,请在名称前加上SESSION,@@ session。或@@” dev.mysql.com/doc/refman/5.1/en/set-option。 html
Derek Downey

嗯..是这样。恢复我的第一个答案。
Morgan Tocker 2011年

嘿,摩根,谢谢您的回复!但是,如果我不想或不能执行SET GLOBAL怎么办?我可以只为非常特定的数据库/表设置它,而不必使用会话变量吗?
Bernardo Oliveira

如果您不能执行SET GLOBAL,则每个您不希望这种行为的会话都运行SET auto_increment_increment = 1;
Morgan Tocker 2011年

2

这两个变量都具有全局值和会话值。因此,很有可能您只更改了关闭MySQL Workbench时消失的会话值。

另一个需要注意的警告是

这些变量控制MySQL服务器上所有表中所有AUTO_INCREMENT列的行为。如果设置了其中一个变量的全局值,则其影响将持续到通过设置会话值更改或覆盖全局值,或直到重新启动mysqld为止。如果设置了本地值,则新值将影响会话期间当前用户在其中插入新行的所有表的AUTO_INCREMENT列,除非在该会话期间更改了值。

可能还会欺骗您的是更改增量大小时计算下一个自动增量值的方式。它不使用最后存储的列值,而是使用公式计算下一个最大值

auto_increment_offset + N × auto_increment_increment

N是整数,因此新值大于现有的最大值。

有关详细信息,请参见auto_increment_increment文档。


那是非常有用的信息。谢谢MicSim!确实,我只是在更改会话值。试图弄清楚如何永久更改它,但仅针对一个数据库或一个表。有任何想法吗?
Bernardo Oliveira

如文档所述,无法将其设置为db或table-wise。抱歉,在这里我无能为力。也许您正在尝试通过自动增量功能实现某些原本不希望的功能。
MicSim 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.