当指定的日期到达MYSQL时,如何使用触发器在表中进行更改?

时间:2015-05-08 01:43:43

标签: php mysql triggers

我有一个文档数据库,它有一个列来指示文档是否已存档。收到文件一个月后,文档将设置为存档。这是文档表的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'表明它现在在档案中。

如何做到这一点?可以用触发器完成吗?因为我已阅读触发器被触发'在插入,更新或删除。还有其他办法吗?

需要帮助。谢谢。

2 个答案:

答案 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设置为打开。