- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否可以每周在 mysql 中自动将 3 天前的行移动到另一个名为“Table_Archive”的表中?
表 A 例如:
ID | stringvalue | Timestamp
1 | abc | 2011-10-01
2 | abc2 | 2011-10-02
3 | abc3 | 2011-10-05
4 | abc4 | 2011-10-10
5 | abc5 | 2011-10-11
移动后
表A:
ID | stringvalue | Timestamp
4 | abc4 | 2011-10-10
5 | abc5 | 2011-10-11
表_存档:
ID | stringvalue | Timestamp
1 | abc | 2011-10-01
2 | abc2 | 2011-10-02
3 | abc3 | 2011-10-05
当新输入进入表A时,下一步的ID(PK)不会有任何问题吗?
我得到了什么:
CREATE PROCEDURE clean_tables ()
BEGIN
BEGIN TRANSACTION;
DECLARE _now DATETIME;
SET _now := NOW();
INSERT
INTO Table_Archive
SELECT *
FROM TableA
WHERE timestamp < _now - 3;
FOR UPDATE;
DELETE
FROM TableA
WHERE timestamp < _now - 3;
COMMIT;
END
如何将 _now 更改为 3 天前的日期?
最佳答案
就我个人而言,我会使用 MySQL Event Scheduler .这是一个内置的事件调度程序,类似于 Linux 中的 CRON。
您可以指定它来调用一个过程、过程或函数,或者以指定的时间间隔运行一些 SQL。
阅读 MySQL 文档,举个例子:
CREATE EVENT mydatabase.myevent
ON SCHEDULE EVERY 1 WEEK STARTS CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO
call clean_tables();
这就是说“每周调用一次 clean_tables() 并在 10 分钟内进行第一次调用”
一个问题是事件调度程序(我认为)默认情况下是禁用的。要打开它运行:
SET GLOBAL event_scheduler = ON;
然后你可以运行:
SHOW PROCESSLIST;
查看事件调度程序线程是否正在运行。
至于保留您的表 A ID 列(如果必须的话)。我会将 Table_Archive 上的 ID 保留为该表的唯一 ID,即将其设为主键和 auto_increment,然后有一个“Original_TableA_ID”列用于存储 TableA ID。如果需要,您可以在上面放置一个唯一索引。
所以 Table_Archive 会是这样的:
create table `Table_Archive` (
ID int unsigned primary key auto_increment, -- < primary key auto increment
tableAId unsigned int not null, -- < id column from TableA
stringValue varchar(100),
timestamp datetime,
UNIQUE KEY `archiveUidx1` (`tableAId`) -- < maintain uniqueness of TableA.ID column in Archive table
);
似乎没有人回答您最初的问题“如何将 _now 更改为 3 天前的日期?”。您可以使用 INTERVAL
执行此操作:
DELIMITER $
CREATE PROCEDURE clean_tables ()
BEGIN
BEGIN TRANSACTION;
DECLARE _now DATETIME;
SET _now := NOW();
INSERT
INTO Table_Archive
SELECT *
FROM TableA
WHERE timestamp < _now - interval 3 day;
FOR UPDATE;
DELETE
FROM TableA
WHERE timestamp < _now - interval 3 day;
COMMIT;
END$
DELIMITER ;
最后一点是您应该考虑在 TableA 的时间戳列上创建索引以提高 clean_tables() 过程的性能。
关于mysql - 将行从 TableA 移动到 Table-Archive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7724824/
我在 Codeigniter 工作。我在 MySql 数据库“menus”和“menus_child”中有两个表。结构是: table: menus 编号 |菜单名称 1 |产品 table: men
我有两个表 TableA 和 TableB。 表A: id | users | ------------------- 1 | ["2","5","4"]| 2 | NULL
希望有人能给我一个关于如何在 MSSQL 2008/2005 中执行以下操作的一般示例 我需要在 1 个存储过程中执行以下操作。 我需要它来验证 TableA 有超过 1 条记录。 如果 TableA
我想选择记录(pm),但排除用户表中不再存在的已删除帐户的ID(发件人)(已删除) 这是“新消息”通知 $sql = "SELECT COUNT(pm.id) c FR
基本上,我想要一个中间Book,位于从Line到User的直接链接之间。 Line 元素已经存在,并且不能失去与相应已存在的 User 元素的关系,因此需要创建一个默认的 Book 元素来处理已有数据
我在 Javascript 中有两个表。 Mass Table - ID
这个问题已经有答案了: cartesian product in pandas (13 个回答) 已关闭 4 年前。 我想将两个数据帧合并在一起以模仿“select * from A, B”,例如,表
这是一个有效的 mysql 语句吗? select * from TableA , TableB ; 如果不是,选择这两个表的正确 mysql 语句是什么。 为什么我认为这有问题,因为我写了一个 my
我的 TableA 有数十万行,而且大小还在增加。没有分区,速度下降得非常明显。 因此,我创建了一个名为 TableB 的新表,其中的列与 Oracle SQL Developer 中的 TableA
是否可以每周在 mysql 中自动将 3 天前的行移动到另一个名为“Table_Archive”的表中? 表 A 例如: ID | stringvalue | Timestamp 1 | abc
我有两张 table 。 msUser 和 msUserChar。我在 msUser 和 msUserChar 之间建立了关系,其中 msUser 中的 PK 是 msUserChar 中的 FK 我
我正在创建一个数据库,并且我有表 ProjectDetails.TimeCardExp 和 ProjectDetails.Project。 TimeCardExp 表有一列 ExpenseDate,在
我正在尝试弄清楚如何使用 Postgresql 8 定义数据库的模式。 我有 2 个表: 期刊,书籍 定义我拥有的出版物 Journal: id_j, name, issn, other fields
我有一个包含几张工作表的工作簿,每张包括一个列表对象(一个表格) 我的目的是从不同的列表对象中获取数据并将其粘贴到另一个列表对象中。或者更准确地说,在另一个表中一个接一个地复制几个表的几列。 到目前为
基本上,我想要的是,如果 tableB 中有一条类型为“X”的记录,我想查看它,否则我不想查看,但我想要 tableA 中的所有记录。 我知道我可以通过将 tableB.type = 'X' 放在 L
有什么东西可以让我们更快地拿到 no.表中的行数,而不是使用 count(1)。还有两种情况: a) 当我们想要获得编号时。表中的行数。 b) 当我们只想知道是否至少有一行时。 提前致谢。 最佳答案
我需要为 tableB 的每个值选择并插入 tableA 的值。有什么建议么? 所以基本上结果表将是这样的: 1 | 1 1 | 2 1 | 3 2 | 1 2 | 2 2 | 3 最佳答案 这听起来
我们都知道要从表中选择所有列,我们可以使用 SELECT * FROM tableA 有没有办法从表中排除列而不指定所有列? SELECT * [except columnA] FROM tableA
我有两张 table 。第一个表称为 employeeinfo,它看起来像这样: ___________________________________________________________
我的数据是这样的: TableA - id INT - is_in_table_b BOOL TableB - id INT - table_a_id INT 我在重组数据结构时不小心删除了开发机器上
我是一名优秀的程序员,十分优秀!