MySQL表作为FIFO /队列

时间:2012-04-04 19:12:27

标签: mysql stack queue fifo

我们如何将Mysql表视为有限的FIFO缓冲区(队列)。

目标是:

  1. 一次只能有N行。
  2. 插入行时,删除最旧的行shpuld以将行计数保持为N.
  3. 请提出方法。

    更新 对不起,伙计们,正如许多人指出的那样我将问题从STACK改为FIFO队列

6 个答案:

答案 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队列中提取记录。

:(但它不是桌子的引擎。