4

order_retailer と order_customer の 2 つのテーブルがあります。

どちらも自動インクリメントされた主キー order_id を持っています

システム全体で注文IDを一意に保つには、order_retailerに偶数のみのIDを持たせ、order_customerのIDは奇数にします。このために、自動インクリメントのインクリメント値を 2 に設定する必要があります。mysql でテーブルごとに設定することは可能ですか。

PHPソリューションは必要ありません。特定のテーブルの自動インクリメント シフトを 2 に設定するコマンド/クエリがあれば教えてください。また、サーバー変数 auto_increment_increment または auto_increment_offset またはその他のサーバー変数を変更したくありません

4

2 に答える 2

12

1 つのテーブルの自動インクリメント フィールドを他のテーブルからオフセットすることができます。つまり、1 つのテーブルは ID を 1 から開始し、もう 1 つのテーブルは 1000000 (または使用パターンに応じて選択した他の値) から開始します。

CREATE TABLE table1 (id BIGINT UNSIGNED AUTO_INCREMENT);
CREATE TABLE table2 (id BIGINT UNSIGNED AUTO_INCREMENT) AUTO_INCREMENT = 1000000;

必要に応じて自動インクリメント列タイプを選択することもできます。BIGINT UNSIGNED の範囲は 0..18446744073709551615 で、ほとんどの場合をカバーするはずです。

また

試す

SET @@auto_increment_increment=2;
SET @@auto_increment_offset=2;
于 2013-01-17T07:06:15.193 に答える
7

いいえ、テーブルごとに設定することはできません。

Mysql には 2 つの変数がauto_increment_incrementありauto_increment_offset 、これら両方の変数の値はデフォルトで 1 です。値のいずれかを変更すると、グローバルな効果が得られます。

問題を解決するには、必要に応じて ID を持つストアド プロシージャを作成します。

このリンクを参照してくださいhttp://dev.mysql.com/doc/refman/5.0/en/replication-options-master.html#sysvar_auto_increment_increment

お役に立てれば

于 2013-01-17T07:07:58.200 に答える