好吧,我目前正在开发一个网站,应该有一个可搜索的泳池水泵数据库。作为这个系统的一部分,为了防止人们阅读隐藏的数据,我使用随机生成的池泵库存的主键。以下是我为MariaDB后端编写的代码:如何获取MariaDB/MySQL中插入行的随机生成主键?
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,我可以在PDO中使用LAST_INSERT_ID函数或lastInsertId。但由于我没有使用AUTO_INCREMENT,而是使用了单独的触发器,所以这些函数只会返回0.我知道我可以在PostgreSQL中使用RETURNING子句来完成它,但是我找不到在MariaDB的。
有谁知道任何解决方案?也许一些我不知道的模糊触发器?请?
“阻止人们阅读隐藏数据”。如果他们可以直接访问数据库,他们可以阅读完整的表格: - ? –
你在做什么是一个可怕的想法。与你的想法不同,你应该做的是使用'auto_increment',但是当你向用户显示数据时 - 加密id。这会阻止人们猜测实际价值是什么。你在那里做什么会摧毁你的数据库性能,这甚至不是最大的问题。 – Mjh
@ÁlvaroGonzález他的意思是改变URL或任何其他入口点到另一个ID – FMashiro