ID 列を 2 の累乗にする必要があるプロジェクトに取り組んでいます ( 1,2,4,8,16..)。をオフセットすることはできませんauto_incrementが、 での単純な加算/減算が必要であることはわかっていmy.cnfます。
例:
id
----
1
2
4
8
16
32
64
128
etc
私が持っていたアイデアの 1 つは、自動インクリメント機能をベースとして使用し、2 の累乗を適用して新しい ID を更新するトリガーを作成することでしたが、残念ながら機能していません。
DELIMITER $$
CREATE TRIGGER testbitcompatid BEFORE INSERT ON Table
FOR EACH ROW
BEGIN
SET NEW.id = pow(NEW.id, 2)
END;
$$
DELIMITER ;
BEFORE INSERTは をまだ生成していないため、AUTO_INCREMENT idはAUTO_INCREMENT常に を返し0、基本的に列に変化は生じません。
私も試しましたAFTER INSERT:
DELIMITER $$
CREATE TRIGGER testbitcompatid AFTER INSERT ON Table
FOR EACH ROW
BEGIN
SET Table.id = pow(NEW.id, 2) WHERE id = NEW.id;
END;
$$
DELIMITER ;
ただし、実行中にトリガーが適用されるテーブルの値を変更できないため、これは失敗しましたAFTER INSERT。
頭を悩ませていますが、他の誰かがこれを達成する素晴らしい方法を持っていると確信しています。