我正在开展一个项目,我需要我的ID列是2的幂(1,2,4,8,16..
)。我知道我们无法抵消auto_increment
但是my.cnf
中的简单加法/减法。
示例:
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
,实际上不会对列进行任何更改。< / p>
我也试过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
期间应用触发器的表的值。
抓我的头,但我相信其他人有很好的方法来实现这一目标。
答案 0 :(得分:-1)
为了解决上述所有问题,我能够构建以下非常有用的内容!
DELIMITER $$
CREATE TRIGGER testbitcompatid BEFORE INSERT ON Table
FOR EACH ROW
BEGIN
SET @LAST_ROW = (SELECT MAX(id) FROM Table);
SET NEW.id = CASE WHEN @LAST_ROW IS NULL THEN 1 ELSE @LAST_ROW * 2 END;
END;
$$
DELIMITER ;
相当多,我们采用最高id
,抓住log(2)
,它会为我们提供相应的AUTO_INCREMENT
id
。然后,我们添加1
,并将其提升至2
。
我希望这有助于防止其他人头疼。