0

我正在做一个项目,我需要我的 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 idAUTO_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.

挠头,但我相信其他人有一个很好的方法来实现这一点。

4

1 回答 1

-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.

我希望这有助于防止其他人在路上感到头疼。

于 2012-09-13T17:55:49.570 回答