MySql存储过程更新数据库记录
我以前没有写过任何MySql存储过程,所以我对它们一无所知。我有一个数据库表,其中有一些记录。主列是dateTime—此记录保存在数据库中的时间 我编写了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; 这工作正常,它会返回指定日期的记录 我需要做的是: 如果记录超过一周,
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
闰秒和闰年怎么样-闰秒和闰年怎么样-