我有一个文档数据库,它有一个列来指示文档是否已存档。收到文件一个月后,文档将设置为存档。这是文档表的create语句。
CREATE TABLE IF NOT EXISTS `dts_document` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`subject` varchar(100) NOT NULL,
`description` text,
`action` varchar(20) DEFAULT NULL,
`from` varchar(100) NOT NULL,
`deadline` date NOT NULL,
`attachment` varchar(250) DEFAULT NULL,
`status` enum('Compiled','On-Going','Cancelled','') DEFAULT NULL,
`referenceNumber` varchar(20) DEFAULT NULL,
`dateReceived` date NOT NULL,
`archive` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;
" dateReceived"是将文档添加到数据库的时间。现在"存档"被设置为' 0' 0默认情况下表示它尚未存档。收到文件一个月后,它应自动设置为' 1'表明它现在在档案中。
如何做到这一点?可以用触发器完成吗?因为我已阅读触发器被触发'在插入,更新或删除。还有其他办法吗?
需要帮助。谢谢。
答案 0 :(得分:0)
将INSERT,UPDATE或DELETE语句触发到表或视图(DML触发器)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNA`z`L NAME <method specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
答案 1 :(得分:0)
我认为您想使用MySQL scheduler。您可以将事件设置为每天重复一次,并在此处 - 只归档所有超过一个月的文档。
create event archive_documents
on schedule
every 1 day
starts '2015-05-09 01:00:00' on completion preserve enable
do
update dts_document
set archive = 1
where datereceived < now() - interval 1 month;
为了使其正常工作,您需要确保将全局变量event_scheduler
设置为打开。