Net*_* Yo 5 php mysql sql database undo
如何删除/移动/标记电子邮件时,如何像Gmail一样实现对MySQL数据库的撤消更改功能.
到目前为止,我有一个系统日志表,其中包含用户执行的确切sql语句.
例如,我正在尝试转换:
INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
Run Code Online (Sandbox Code Playgroud)
成:
DELETE FROM table WHERE id=1, column1='value1', column2='value2'
Run Code Online (Sandbox Code Playgroud)
是否有内置函数来执行此操作,如cisco路由器命令,如
(NO|UNDO|REVERT) INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
Run Code Online (Sandbox Code Playgroud)
也许我的方法是不正确的,我应该保存我的行的当前状态和更改的行,以回到它的原始状态?
就像是:
original_query = INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
executed_query = INSERT INTO table (id, column1, column2) VALUES (1,'change1', 'change2')
Run Code Online (Sandbox Code Playgroud)
后来变成:
INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2') ON DUPLICATE KEY UPDATE
column1=VALUES(column1), column2=VALUES(column2)
Run Code Online (Sandbox Code Playgroud)
但也许它不适用于新插入的行,或者如果我修改主键可能会导致麻烦,所以我宁愿让它们保持不变.
这是我的日志表:
CREATE TABLE `log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT ,
`date` datetime NOT NULL ,
`user` int(11) NOT NULL,
`client` text COMMENT ,
`module` int(11) unsigned NOT NULL ,
`query` text NOT NULL ,
`result` tinyint(1) NOT NULL ,
`comment` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
目标就像我说的,根据语句执行的日期从某段时间撤消更改,例如(可以在php中)
function_undo(startdate, enddate)
{
RESULT = SELECT query FROM log WHERE date BETWEEN startdate AND endate
FOR EACH RESULT AS KEY - query
REVERT query
}
Run Code Online (Sandbox Code Playgroud)
或撤消按钮以还原单个操作(单个记录的查询).
这是我对"增量备份更改"的概念是正确的,还是我过度复杂化了一切?考虑到一个明显的事实,即如果我存储完整的查询,我的数据库的大小将是双倍或可能是三倍.我应该将它存储在不同的数据库中吗?或者只是在我编写完整备份后删除日志表以仅保留最近的更改?
欢迎任何建议......
这总是有问题的,SQL 2012 解决了这个问题。时间模型很简单:添加间隔列(valid_from,valid_to),但实现约束非常复杂。模型操作也很简单:
1.插入-新版本valid_from=now,valit_to=null 2.更新-新版本valit_from=now,valit_to=null,更新之前版本valit_to=now 3.删除-更新当前版本valit_to=now 4.撤消删除-更新最后版本valit_to=null 5. 撤消更新/插入 - 如果不需要重做,则删除当前版本;如果先前版本存在,则更新 valit_to=null
重做更复杂,但很相似,通常此模型用于数据仓库中来跟踪更改而不是重做功能,但它也应该适合重做。它也被称为数据仓库中缓慢变化的维度。
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |