好的,我目前正在开发一个网站,该网站应该具有可搜索的泳池泵数据库。作为该系统的一部分,为了防止人们读取隐藏的数据,我随机生成了池泵库存的主键。这是我为MariaDB后端编写的代码:

DELIMITER $$
CREATE TRIGGER random_pump_id BEFORE INSERT ON tbl_stock FOR EACH ROW
  BEGIN
    DECLARE temp_id MEDIUMINT;
    REPEAT
      SET temp_id = FLOOR(RAND() * 16777216);
    UNTIL (SELECT COUNT(*) FROM tbl_stock WHERE pump_id = temp_id) <= 0 END REPEAT;
    SET NEW.pump_id = temp_id;
  END
$$


但是现在我陷入了困境。每当我想插入一行时,我都需要一种方法来检索刚生成的主键。我知道是否使用了AUTO_INCREMENT我可以使用LAST_INSERT_ID函数或PDO中的lastInsertId。但是由于我没有使用AUTO_INCREMENT,而是使用了单独的触发器,所以这些函数只会返回0。我知道我可以在PostgreSQL中使用RETURNING子句来完成此操作,但是我找不到在MariaDB。

有人知道任何解决方案吗?也许是我不知道的一些晦涩的触发器?请?

最佳答案

大概您还有其他方法可以找到记录?可能通过UNIQUE键?如果是这样,则在添加随机ID后提取行。
不要使用触发器,而是编写应用程序代码。 (触发器无法解决所有问题。)

关于php - 如何获得在MariaDB/MySQL中插入行的随机生成的主键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44669713/

10-12 03:16