3
A
回答
3
有幾種可能的方法,一種是使用存儲過程插入記錄。這樣,SP會檢查是否有超過20個,並在插入新的之後刪除舊的。缺點是如果你手動插入一行,它不會被丟棄。
一個trigger可能工作...創建AFTER INSERT
觸發器,然後刪除舊的登錄> 20 ...
2
不,這是不可能的。
有兩種方式:
- 定期從表中刪除行,讓20行仍然存在。
- 當插入一行並且有超過20行時,更新現有行而不是插入它。
1
我不相信你可以指定表只能存儲一定數量的記錄,但是你可以控制插入新記錄的行爲。 MySQL爲您提供了一些非標準工具,可以幫助您在不使用sprocs或觸發器的情況下實現此功能。看到這個鏈接:http://www.xaprb.com/blog/2007/01/11/how-to-implement-a-queue-in-sql/
在那篇文章中的描述是非常詳盡的,我不會在這裏重複很多。總而言之,您使用MySQL的REPLACE命令而不是INSERT,或者使用ON DUPLICATE KEY UPDATE語句作爲INSERT查詢的一部分。將它與一個帶有兩個唯一鍵的表結合在一起...
此表有兩個唯一鍵:一個用作單調增加的「行號」,另一個用於使換行效果起作用。唯一真實的數據是水果專欄。這裏有一個查詢中插入「蘋果」到隊列:
insert into q(id, modulo, fruit)
select
(coalesce(max(id), -1) + 1),
(coalesce(max(id), -1) + 1) mod 5,
'apples'
from q
on duplicate key update
id = values(id),
fruit = values(fruit)
這裏的查詢做什麼:它發現在表ID的最大值,這應該因爲它的索引是有效的。如果沒有行,則結果將爲NULL,其中COALESCE()將轉換爲-1。然後它爲該值添加一個值,該值將成爲id序列中下一個最大的值。我在這裏真正做的是滾動我自己的AUTO_INCREMENT,稍微扭曲一下:序列從零開始,而不是一個。
等請參閱(許多)更多細節的鏈接。 :)
請注意,對於您的情況(因爲您想維護20個記錄每個用戶),您需要通過UserID添加適當的過濾邏輯。如果你一次只爲一個用戶插入一行,這應該是非常簡單的...
相關問題
- 1. 在mySQL記錄中存儲值列表
- 2. 限制的記錄數在MySQL查詢
- 3. 如何限制SQLite/MySQL中的列值
- 4. 如何限制的記錄數創建
- 5. Janus GridEX - 存儲過程記錄集 - 如何編輯某些列
- 6. MySQL表記錄限制
- 7. 如何使用返回值的存儲過程返回MySQL的總記錄數
- 8. 如何限制MySQL的列?
- 9. 如何將無限數據存儲到mysql中的特定列
- 10. 的MySQL:查詢與某些專屬列值的記錄的組
- 11. 羣組的MySQL限制記錄
- 12. 在MySQL中返回的限制記錄
- 13. Mysql隨機記錄的多個限制
- 14. MySQL的 - 獲取每個值Y X記錄中某列的
- 15. 如何限制空值存儲在我的數組中?
- 16. 限制的記錄
- 17. Rails:加入時限制某些記錄
- 18. 查看mysql記錄存儲的圖像
- 19. 如何限制列的值
- 20. MySQL - 強制新記錄字段值的限制大於以前的記錄字段值字段值
- 21. 如何限制正在複製的某個值的數量。
- 22. 如何連接並存儲MYSQL列值?
- 23. 存儲記錄陣列
- 24. 在mysql中記錄不同記錄後應用10的限制
- 25. 有沒有辦法限制某些集合中的記錄數
- 26. MySQL轉儲限制? MySQL的整體數據庫大小限制?
- 27. 如何在MYSQL數據庫中存儲10000條記錄?
- 28. 如何限制MYSQL中的複合記錄?
- 29. 限制選定的行數MySQL中的存儲過程參數
- 30. MySQL在一列中將記錄數量限制爲5個唯一值