我的任务涉及从不断更新的 MySQL 表中读取数据,该表使用以下命令创建:
CREATE TABLE mailing (
addr VARCHAR(255) NOT NULL
);
(没有 date_created 字段或任何东西,有点随意,我知道,但这就是我得到的)
该表应该容纳数百万个电子邮件地址,并且每天都会添加更多地址。
我应该在一个单独的表中计算该表中所有域过去 30 天的每日增长情况,我使用以下命令创建该表:
CREATE TABLE domain_count (
domain VARCHAR(255) NOT NULL PRIMARY KEY,
total_count INT(11) NOT NULL DEFAULT 0,
count_1 INT(11) NOT NULL DEFAULT 0,
count_2 INT(11) NOT NULL DEFAULT 0,
...
count_30 INT(11) NOT NULL DEFAULT 0
);
如果说,在第 1 天,邮件表包含来自单个域的 10 个地址,在第 2 天,它包含 15 个地址,那么我希望 domain_count.count_1 = 10 且 domain_count.count_2 = 5
为此,我需要跟踪两件事:一是截至昨天邮件表中的地址总数(因此对于第 2 天,我应该在某个地方存储“10”,对于第 3 天,我应该将“15”存储在某处;这样我就可以从邮件表的第 11/16 列继续搜索)。另一个是最新的 count_# 值,因为我需要知道在第 2 天插入 count_2(并在第 31 天循环回 count_1)。
我可以轻松地将这些值存储在单独的文件中,但这样做感觉真的很困惑。是否有 MySQL 查询可以让我将这些值与表本身关联起来?
最佳答案
您所描述的内容没有标准,没有。
有INFORMATION_SCHEMA ,这是 SQL 标准的一部分。 TABLES表有一列 TABLE_ROWS
,但这仅显示当前行数。
为了执行您所描述的操作,我将基于 TABLES 表创建另一个常规表,添加一个 TIMESTAMP 列,并定期将 I_S 表中的行复制到我自己的表中。
CREATE TABLE mydatabase.TABLES like INFORMATION_SCHEMA.TABLES;
ALTER TABLE mydatabase.TABLES ADD COLUMN updated_at TIMESTAMP;
/* once per day do the following: */
INSERT INTO mydatabase.TABLES
SELECT *, NOW() FROM INFORMATION_SCHEMA.TABLES
WHERE (table_schema, table_name) = ('mydatabase', 'mytable');
关于mysql - 是否有保存有关 MySQL 表的额外信息的标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17756150/