我正在開發一個項目,其中需要我的ID列是2的冪(1,2,4,8,16..
)。我知道我們不能抵消auto_increment
,而是在my.cnf
中進行簡單的加/減。按位計數遞增表ID字段
例子:
id
----
1
2
4
8
16
32
64
128
etc
其中一個想法我是使用自動遞增的功能爲基礎,然後創建一個觸發器適用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
期間應用表中的值。
抓我的頭,但我相信別人有一個偉大的方式來完成這一點。
當您在第一句中說「* 2倍數*」時,您的意思是「* 2 *的力量」嗎? – eggyal
目前還不清楚你想要什麼樣的價值。你說你希望id是2(2,4,6,8等)的倍數,你可以使用auto_increment_increment = 2和auto_increment_offset = 2來完成。問題的標題意味着你想使用2(2,4,8,16等)的權力。但在你的例子中,你只是將所有東西都提升到第二力量(1,4,9,16)。那它是哪一個? –
正確,更新的問題包括,1,2,4,8,16 ... –