基本上我有一个MySQL
数据库,其中有一个表存储来自我网站用户的请求。我想自动执行一个查询,根据列Status = 3
删除所有已完成的请求(已完成意味着列ArchivingDate
)超过180天。
我的Requests
表格:
Requests(
RequestID INT AUTO_INCREMENT PRIMARY KEY,
Ticket VARCHAR(40) NOT NULL UNIQUE,
RequestDate DATETIME NOT NULL,
ReplacementOrRefund INT NOT NULL,
ItemName VARCHAR(200) NOT NULL,
Total NUMERIC(15, 2) NOT NULL,
AccountName VARCHAR(200) NOT NULL,
Email VARCHAR(254) NOT NULL,
BillingAddress VARCHAR(200) NOT NULL,
OrderNumber VARCHAR(50) NOT NULL,
OrderDate DATETIME NOT NULL,
DeliveryDate DATETIME NOT NULL,
WhoSigned VARCHAR(200),
WhereLeft VARCHAR(200),
Status INT NOT NULL,
ArchivingDate DATETIME,
PayPalTransactionID VARCHAR(100),
Toggle TINYINT(1) NOT NULL,
StoreID_FK INT,
FOREIGN KEY (StoreID_FK) REFERENCES Stores(StoreID)
);
我已经编写了查询以删除超过180天的行:
$remove = "UPDATE Requests SET Toggle = 0 WHERE Status = 3 AND ArchivingDate < DATE_SUB(NOW(), INTERVAL 180 DAY)";
注意:我不从表中删除数据,我只需将列Toggle
设置为0
即可“隐藏”它。
问题:如何自动让MySQL每天执行一次此查询(如果可能的话)?
非常感谢你!
答案 0 :(得分:1)
您可以创建一个存储过程,根据“RequestDate”上180天的条件删除记录,并每天安排存储过程。 现在MySQL将自动处理删除。
答案 1 :(得分:0)
是的,有可能,请参阅此文章:http://www.sitepoint.com/how-to-create-mysql-events/
答案 2 :(得分:0)
这取决于你拥有的操作系统。
Linux
使用文件/ etc / crontab,添加指定时间和命令执行命令的行。 crontab文件中的列为:分钟,小时,月,日,星期几,以用户身份运行,命令。(Colums按空格分隔) 例如:
30 22 * * * apache php /usr/remove_old.php
它将在22:30每天晚上执行。
最好将执行结果放到日志文件中。
30 22 * * * apache php /usr/remove_old.php&gt;&gt; \ var \ log \ removed_requests.log 2&gt;&amp; 1
如果出现问题,你可以稍后分析。
<强>窗强>
您可以使用任务计划程序。