gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:39:51 25 4
gpt4 key购买 nike

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

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

CREATE PROCEDURE getMessages(IN dateFrom DATETIME)   
SELECT * FROM EsbMessage WHERE dateTime <= dateFrom;

这是调用:

CALL getMessages('2012-10-04 13:11:09');

这工作正常,它返回指定日期的记录。

我需要做的是:

  1. 如果记录超过一周,我需要更新另一个专栏。
  2. 如果记录超过一年,我需要删除该记录。

我可以轻松地以编程方式执行此操作,但在这种情况下,我必须使用存储过程来执行此操作。

所以我在想这样的事情:

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);

关于MySql存储过程更新数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com