MySQL Auto_incrementが2行2列に進む


8

先日、MySQL Workbenchをインストールし、会社のデータベースにアクセスして、自分で作業するためのテーブルを作成しました。ここまでは順調ですね。問題は、auto_incrementが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_increment1に設定してみました:

SET @@auto_increment_increment=1

そして、もう一度SHOW VARIABLES LIKE 'auto_inc%'確認したところ、「動作する」という結果で確認されました。

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

しかし、私のIDはまだ2ずつ増加しています。

最初にそれを実行したとき、それはうまくいき、それからMySQL Workbenchを閉じて、もう一度開いたときに、再び2auto_increment_incrementに設定されていることに気付きました。今、私はもう一度それをやろうとしていますが、それはもううまくいかないようです。

誰か助けてくれますか?

みんなありがとう。


2
私の会社の環境がそれを設定している理由を完全に理解せずに、この値を慎重に変更します。たとえば、マルチマスターレプリケーションセットアップで実行するときに変更するのは一般的な変数です。しているテスト(本番でテストがところで、また悪い考えである)あなたも、私たちはSHOWは、テーブル用のCREATE TABLE文を取得することができます
デレク・ダウニー

これは私が思う答えになるに値します。または、既存のものに追加することもできます。最善のアクションは、仕事を続けたいDBAにとって、慎重なアクション、またはアクションをまったく行わないことです。
ypercubeᵀᴹ

回答:


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。、または@@を付けます
デレクダウニー

うーん..そうです。私の最初の答えを復元します。
モーガントッカー、2011

モーガンさん、返信ありがとうございます。しかし、SET GLOBALを実行したくない、または実行できない場合はどうなりますか?セッション変数を使用せずに、非常に特定のdb / tableにのみ設定できますか?
ベルナルドオリベイラ

SET GLOBALを実行できない場合、この動作を望まないセッションごとにSET auto_increment_increment = 1を実行します。
Morgan Tocker、2011

2

どちらの変数にもグローバル値とセッション値があります。したがって、MySQL Workbenchを閉じたときに失われたセッションの値のみを変更した可能性が非常に高いです。

注意すべきもう1つの警告は、

これらの変数は、MySQLサーバー上のすべてのテーブルのすべてのAUTO_INCREMENTカラムの動作を制御します。いずれかの変数のグローバル値が設定されている場合、その影響は、セッション値の設定によってグローバル値が変更またはオーバーライドされるまで、またはmysqldが再起動されるまで持続します。ローカル値が設定されている場合、セッション中に値が変更されない限り、新しい値は、セッション中に現在のユーザーによって新しい行が挿入されるすべてのテーブルのAUTO_INCREMENT列に影響します。

また、あなたをだますかもしれないのは、増分サイズを変更したときに次の自動増分値が計算される方法です。最後に保存された列の値は使用しませんが、式を使用して次に高い値を計算しています

auto_increment_offset + N × auto_increment_increment

一方、Nは整数なので、新しい値は既存の最大値よりも大きくなります。

詳細については、auto_increment_incrementのドキュメントをご覧ください。


これは非常に役立つ情報です。MicSimに感謝します!実際、私はセッション値のみを変更していました。永続的に変更する方法を見つけようとしますが、1つのデータベースまたはテーブルに対してのみです。何か案は?
Bernardo Oliveira

ドキュメンテーションが言うように、それをdbまたはテーブル単位で設定することはできません。申し訳ありませんが、ここではお手伝いできません。多分あなたはそれが意図されていなかった自動インクリメント機能で何かを達成しようとしている。
MicSim 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.