2013-11-04 79 views
3

我有一个名为仓库为我的数据库表,它有Warehouse_idWarehouse和Warehouse_name作为主键。我想要做的是有效地存储最近N次对表中存储的每个仓库进行的更改。我曾考虑过创建一个“助手”表(例如warehouse_changes)并通过我的应用程序处理更新,但老实说,感觉就像有一个更聪明的方法。什么是最有效的方式来存储mysql表最近的变化

是否有办法为每个仓库存储特定数量的条目并自动管理通过mysql工作台更新正确的元素?提前致谢,请记住,我在这个领域并不是特别先进。

+0

这是什么意思“是有没有办法为每个仓库存储特定数量的条目,并通过mysql工作台自动管理更新正确的元素?“?例如,你能描述一下理想情况下的工作方式吗? (另外,我不明白数据库术语中“元素”的含义。) – AgRizzo

+0

可能重复[这是创建审计跟踪的最佳方法吗?](http://stackoverflow.com/questions/711597/is-这是最好的方法来创建一个审计跟踪) – ModulusJoe

+0

感谢您的快速回答!因此,请考虑您拥有仓库表,其中条目随时间收集(新条目通过应用程序插入)。理想情况下,对于仓库表内的每个条目(这是我的意思是元素),我想要一种方式来存储15个记录,这些记录是对这个仓库进行的变化以及它存储产品的能力。我希望最多15条记录的数据“将添加到此仓库”,或“将的移动到<仓库名称>”。 – Mark

回答

1

a very detailed article on O'Reilly Answers,它描述了如何使用触发器来完成你想要的。

当用两个词来解释时,您需要为每个要存储的操作类型创建一个辅助表和触发器。例如,这里的更新触发的外观根据这篇文章,如:

-- Creating a trigger that will run after each update 
-- for each affected row 
CREATE TRIGGER au_warehouse AFTER UPDATE ON Warehouse FOR EACH ROW 

BEGIN 

    -- Insert new values into a log table, or you can insert old values 
    -- using the OLD row reference 
    INSERT INTO warehouse_log (action, id, ts, name) 
     VALUES('update', NEW.id, NOW(), NEW.name); 

END; 

那之后,你可以使用一个简单的SQL查询获取最新的1000点的变化:

SELECT * FROM warehouse_log ORDER BY ts DESC LIMIT 1000; 
+0

感谢您的回答。但有一个问题:考虑到我想为每个仓库存储相对少量的“日志”,最多20个,这个解决方案不会占用比必要的更多的空间吗?我正在努力寻找最有效的解决方案。 – Mark

+0

就我所见,这是追踪变化的最有效方式。您也可以从应用程序中执行此操作,并检查日志是否比所需时间长,但效率会降低。也许如果你担心日志需要的空间,你可以设置一个自动截断脚本,每24小时运行一次查询语句来清理不需要的条目。但这是一个不同的问题:) –

+0

当然。从一开始,这个讨论在本质上有些学术性,因为我正在做一个“模拟”而不是一个真正的基于数据库的应用程序。但是,如果将来我想用这个更具体的东西,我显然不得不考虑这些问题。我想我会用触发器解决方案,这似乎是最可行和相对简单的。谢谢你的帮助! – Mark

相关问题