偶数または奇数を生成する (反対をスキップする) 自動インクリメント フィールドを持つことは可能ですか? 私が尋ねている理由は、2 つのテーブル間で自動インクリメントを共有したいからです。それを達成するための他の方法は歓迎されます。
前もって感謝します!
偶数または奇数を生成する (反対をスキップする) 自動インクリメント フィールドを持つことは可能ですか? 私が尋ねている理由は、2 つのテーブル間で自動インクリメントを共有したいからです。それを達成するための他の方法は歓迎されます。
前もって感謝します!
Juergen が述べたように、my.ini ファイルで次の変更 (または追加) を行うことで、セッション レベルではなくシステム レベルでそれを行うことができます。
auto-increment-increment = 2
auto-increment-offset = 1
また
auto-increment-increment = 2
auto-increment-offset = 2
基本的に、これは Master-Master レプリケーションのセットアップでよく使用されます。
試す
SET @@auto_increment_increment=2;
SET @@auto_increment_offset=2;
トリガーを使用して、カスタムの自動インクリメント機能を実現できます。
カスタム自動インクリメント値を格納するテーブルを作成し、初期値を含む 1 つの行を挿入します。
CREATE TABLE autoincrement_id (id_even INT, id_odd INT);
INSERT INTO autoincrement_id VALUES (0, 1);
挿入された行の ID 値を適宜変更するトリガーを作成します。
CREATE TRIGGER set_id_in_sometable_with_odd_id BEFORE INSERT ON `sometable_with_odd_id`
FOR EACH ROW
BEGIN
SET NEW.id = (SELECT id_odd FROM autoincrement_id LIMIT 1);
UPDATE autoincrement_id SET id_odd = id_odd + 2;
END;
CREATE TRIGGER set_id_in_sometable_with_even_id BEFORE INSERT ON `sometable_with_even_id`
FOR EACH ROW
BEGIN
SET NEW.id = (SELECT id_even FROM autoincrement_id LIMIT 1);
UPDATE autoincrement_id SET id_even = id_even + 2;
END;
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 で、ほとんどの場合をカバーするはずです。