MySql存储过程更新数据库记录

MySql存储过程更新数据库记录,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我以前没有写过任何MySql存储过程,所以我对它们一无所知。我有一个数据库表,其中有一些记录。主列是dateTime—此记录保存在数据库中的时间 我编写了MySql存储过程来选择指定日期的每条记录: CREATE PROCEDURE getMessages(IN dateFrom DATETIME) SELECT * FROM EsbMessage WHERE dateTime <= dateFrom; 这工作正常,它会返回指定日期的记录 我需要做的是: 如果记录超过一周,

我以前没有写过任何MySql存储过程,所以我对它们一无所知。我有一个数据库表,其中有一些记录。主列是dateTime—此记录保存在数据库中的时间

我编写了MySql存储过程来选择指定日期的每条记录:

CREATE PROCEDURE getMessages(IN dateFrom DATETIME)   
    SELECT * FROM EsbMessage WHERE dateTime <= dateFrom;
这工作正常,它会返回指定日期的记录

我需要做的是:

如果记录超过一周,我需要更新另一个 柱 如果记录超过一年,我需要删除该记录。 我可以很容易地通过编程实现这一点,但在这种情况下,我必须使用存储过程来实现这一点

所以我在想这样的事情:

CREATE PROCEDURE updateMessages(IN dateFrom DATETIME)   
    BEGIN
      SELECT * FROM EsbMessage WHERE dateTime <= dateFrom;
      #for each message
      #if the message is over one week old but not over one year old:
      UPDATE EsbMessage SET body = '';
      #if message is over one year old:
      DELETE FROM EsbMessage WHERE dateTime = #message.dateTime
END
但我不知道如何在存储过程中使用for循环,如何根据自己的需求编写if语句,还有一件事我现在不知道如何在MySql中计算日期。例如,如果我有当前日期,那么我需要从当前日期中减去365天


有人能帮我解决这个问题吗?

您不需要循环,只要在WHERE子句中包含您的条件:

#if the message is over one week old but not over one year old:
UPDATE EsbMessage SET body = ''
WHERE dateTime >= DATE_SUB(NOW(),INTERVAL 1 WEEK) AND dateTime <= DATE_SUB(NOW(),INTERVAL 1 YEAR);

#if message is over one year old:
DELETE FROM EsbMessage WHERE dateTime >= DATE_SUB(NOW(),INTERVAL 1 YEAR);

您不需要循环,只需在WHERE子句中设置条件:

#if the message is over one week old but not over one year old:
UPDATE EsbMessage SET body = ''
WHERE dateTime >= DATE_SUB(NOW(),INTERVAL 1 WEEK) AND dateTime <= DATE_SUB(NOW(),INTERVAL 1 YEAR);

#if message is over one year old:
DELETE FROM EsbMessage WHERE dateTime >= DATE_SUB(NOW(),INTERVAL 1 YEAR);

下面介绍了如何循环和使用if子句:

我会做它没有循环:

CREATE PROCEDURE updateMessages(IN dateFrom DATETIME)   
BEGIN      
  UPDATE EsbMessage SET body = '' where dateTime <= dateFrom -(86400*7); //86400 = 1 day
  #if message is over one year old:
  DELETE FROM EsbMessage where dateTime <= dateFrom -(86400*365);
END

下面介绍了如何循环和使用if子句:

我会做它没有循环:

CREATE PROCEDURE updateMessages(IN dateFrom DATETIME)   
BEGIN      
  UPDATE EsbMessage SET body = '' where dateTime <= dateFrom -(86400*7); //86400 = 1 day
  #if message is over one year old:
  DELETE FROM EsbMessage where dateTime <= dateFrom -(86400*365);
END

闰秒和闰年怎么样-闰秒和闰年怎么样-