Mysql 在MariaDB insert触发器中为当前表使用变量?

Mysql 在MariaDB insert触发器中为当前表使用变量?,mysql,triggers,mariadb,Mysql,Triggers,Mariadb,我希望我的id字段值在插入新行时采用随机唯一值。是否可以将下面代码中的myvideos表名替换为当前上下文中表示该表的变量 BEGIN DECLARE next_id INT; DECLARE max_int INT; SET max_int = 4294967295; SET next_id = FLOOR(max_int * RAND()); WHILE (SELECT id FROM myvideos WHERE id = next_id) DO

我希望我的id字段值在插入新行时采用随机唯一值。是否可以将下面代码中的myvideos表名替换为当前上下文中表示该表的变量

BEGIN
    DECLARE next_id INT;
    DECLARE max_int INT;

    SET max_int = 4294967295;
    SET next_id = FLOOR(max_int * RAND());

    WHILE (SELECT id FROM myvideos WHERE id = next_id) DO
        SET next_id = FLOOR(max_int * RAND());
    END WHILE;

    SET NEW.id=next_id;
END

我用的是MariaDB 10。它与insert之前一样声明。

每次对表执行操作时(在您的示例中,每次插入一行时)都会执行触发器。就我个人而言,我会保存我的整个播放列表而不带随机性,我会在我的主软件中洗牌播放列表。这里有两种可能性1。在启动播放列表之前(因此每次启动播放列表时随机性都会发生变化)。2.在切换到下一首歌曲/视频之前(在我看来,这更接近于真正的随机性)。我已经重命名了示例中的表,因为我实际上使用它作为我的许多表的模型。我希望id有一个随机值的原因是它将通过RESTAPI被外部化。虽然我可以有一个外部的_id列,但一般逻辑将保持不变。如果我不在乎,我只会使用自动递增功能。现在我提到这一点,我想知道拥有一个内部id和一个外部id是否会提供任何价值?我刚刚有一个想法,如果在插入数据时不使用触发器生成随机索引,而是创建一个存储过程在返回视频列表之前对其进行洗牌,会怎么样?触发器绑定到特定表,您将无法向其传递参数。另一方面,可以向存储过程传递任意数量的参数(输入和输出)。当然,您只需将性能负载从插入转移到抓取,但是,作为一种优势,您的列表会在每次需要时进行重新洗牌(使用另一个参数,您也会要求不要洗牌列表)。请解释为什么需要“唯一但随机的数字”。唯一,因为它将用作行标识符和随机,因为我不希望这个数字是连续的,因为id将出现在公共RESTAPI中。我们不希望根据id值进行推断,如果该值是连续的,则可以进行推断-这不合理吗?