我想創建一個唯一且限定爲特定值的字段的表。可以說,限制是100,表格已滿,我刪除了一個隨機行,當我創建一個新行時,它具有之前釋放的值。 它不需要成爲世界上最快的東西(極限非常小),我只是想在數據庫中實現它。 任何想法?SQLITE使用唯一的隨機表填充值
1
A
回答
1
該解決方案在觸發器中執行所有操作,因此您可以使用普通的INSERT。
對於表本身,我們使用一個自動增量ID列:
CREATE TABLE MyTable(ID INTEGER PRIMARY KEY, Name);
我們需要另一個表來臨時存儲的ID:
CREATE TABLE moriturus(ID INTEGER PRIMARY KEY);
和觸發:
CREATE TRIGGER MyTable_DeleteAndReorder
AFTER INSERT ON MyTable
FOR EACH ROW
WHEN (SELECT COUNT(*) FROM MyTable) > 100
BEGIN
-- first, select a random record to be deleted, and save its ID
DELETE FROM moriturus;
INSERT INTO moriturus
SELECT ID FROM MyTable
WHERE ID <> NEW.ID
ORDER BY random()
LIMIT 1;
-- then actually delete it
DELETE FROM MyTable
WHERE ID = (SELECT ID
FROM moriturus);
-- then change the just inserted record to have that ID
UPDATE MyTable
SET ID = (SELECT ID
FROM moriturus)
WHERE ID = NEW.ID;
END;
2
在主表中創建一個更多的列,比如deleted
(整數,0或1)。當你需要刪除某些ID,並不真正刪除,而只是更新deleted
以1:
UPDATE mytable SET deleted=1 WHERE id = <id_to_delete>
當你需要插入,找到ID可以重複使用:
SELECT id FROM mytable WHERE deleted LIMIT 1
如果這查詢返回空結果,然後使用INSERT創建新的ID。否則,簡單地更新行:
UPDATE mytable SET deleted=0, name='blah', ... WHERE id=<id_to_reuse>
的所有查詢從主表中讀取應該有WHERE
約束與NOT deleted
條件:
SELECT * FROM mytable WHERE NOT deleted
如果您在deleted
添加索引,這種方法應該工作快甚至大量的行。
相關問題
- 1. Scala使用隨機值填充地圖
- 2. 填充「查找表」與隨機值
- 3. SQLite - 使用隨機唯一值進行更新
- 4. 使用唯一值填充Combobox
- 5. 用隨機值填充通用向量
- 6. 在表中填充值SQLITE
- 7. 用隨機值填充c#對象
- 8. 用隨機整數值填充數組
- 9. CSS隨機填充
- 10. MySql用於隨機填充行的過程只填充一行
- 11. 用隨機數據填充表格
- 12. SQL填充表用隨機數據
- 13. 用隨機字節填充列表
- 14. 用隨機數填充int []
- 15. 填充一個ListView用隨機數據
- 16. 用隨機數據填充的表中的外鍵值MYSQL
- 17. 列表上方的隨機填充?
- 18. 如何使一個隨機填充的列表遞歸SML/NJ
- 19. R使用不帶循環的隨機值填充datas.frame
- 20. 如何填充唯一鍵的值
- 21. 如何用不同的行/列中的唯一隨機數填充數組
- 22. 用固定的數字池中的隨機唯一整數填充矢量
- 23. 如何用特定值填充表而不是僞隨機?
- 24. 用隨機值填充一個緩衝區C++
- 25. Rails:生成用於填充CSS類的唯一隨機數字符串如何?
- 26. 我怎樣才能用唯一的隨機數填充2維數組
- 27. Javascript數組隨機填充
- 28. 隨機填充2d陣列
- 29. 使用數組中的隨機項填充列表框
- 30. 使用VBA的唯一隨機數
謝謝如果這對我的情況不起作用,它應該引導我走向正確的方向。 – user1032861