mysql - 是否有保存有关 MySQL 表的额外信息的标准?

标签 mysql metadata

我的任务涉及从不断更新的 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/

相关文章:

android - 如何使用 Android 应用程序和 Node 服务器实现用户 session ?

mysql - 两张表互相引用的sql查询

Java:如何在 jpeg 文件中编写自定义标签(程序员注意)

java - 如何在icafe中操作图像元数据

Minio 对象存储上的元数据

java - 如何使用hibernate将结果集从mysql映射到pojo?

php - 如何在一个表中链接两个具有自动递增 id 的表?

mysql - 使用 DLZ "/usr/bin/ld: cannot find -lmysqlclient"编译 Bind 时出现 CentOS 错误

java - .NET (Mono) 是否支持跨平台文件操作和跨平台音频元数据处理(通过库)?

database - 您如何将元数据置于版本控制之下?