好吧,我目前正在開發一個網站,應該有一個可搜索的泳池水泵數據庫。作爲這個系統的一部分,爲了防止人們閱讀隱藏的數據,我使用隨機生成的池泵庫存的主鍵。以下是我爲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