我们如何将Mysql表视为有限的FIFO缓冲区(队列)。
目标是:
请提出方法。
更新 对不起,伙计们,正如许多人指出的那样我将问题从STACK改为FIFO队列
答案 0 :(得分:3)
过去的Mysql 5你可以使用触发器来实现这一点。
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
然后你的触发sql就会一直关闭:
DELETE FROM foo WHERE id NOT IN (SELECT id FROM foo ORDER BY id DESC LIMIT 10)
答案 1 :(得分:0)
你可以算上你的桌子,如果是40;只需删除第一行,然后插入要插入的那一行。
get count
if = 40
delete
insert
else
insert
答案 2 :(得分:0)
好吧,你当然可以在表的insert上创建一个AFTER触发器,让它调用一个类似的存储过程:
delete from TableName where ID not in (select top N ID from TableName)
答案 3 :(得分:0)
在插入新内容时,Stack不会删除以前的内容。
但是如果你真的需要这样的结构,那么为每个插页写一个Trigger
之前。
答案 4 :(得分:0)
只是在考虑同样的FIFO问题,除了以FIFO方式处理固定数量的COLUMNS而不是行。但我认为我的解决方案适用于此,快速谷歌搜索并没有为MySQL提供许多FIFO解决方案/示例。
这是我的基于列的场景:我的数据有限10个可用列(data1,data2,data3等),如果我填满了所有10列,则需要编写新的数据,我想覆盖OLDEST数据。
我的解决方案:我添加了第11列以跟踪上次更新的列。因此,当需要编写新数据时,我的脚本可以查找最近更新的列,并使用一些简单的算法,返回跟踪来确定OLDEST列,并将新数据插入到该列中(覆盖已经存在的任何内容)那里)。同时,我可以使用刚更新的列更新'last_updated'列。
当然,你的问题是关于行而不是列,但我不明白为什么我用于列的相同方法不适用于行...例如,你可以创建一个列来跟踪最后一行更新。你永远不会插入新的行;只是覆盖现有的。
我没有计划在数据库级别完全处理我的场景,但似乎它应该是可能的。
最后:这种方法可确保您永远不会有超过N行/列的数据。许多触发方法似乎都需要创建一个“额外”行,即使只是非常非常简短。
答案 5 :(得分:0)
FYI
https://github.com/netkiller/mysql-fifo-plugin
这是mysql的fifo队列。
您可以将一些记录推送到fifo队列。 或从fifo队列中提取记录。
:(但它不是桌子的引擎。