如何在MySQL表中设置最大行数?

WAS*_*D42 14 mysql triggers

我需要在MySQL表中设置行的最大限制.文档告诉我们可以使用以下SQL代码来创建表:

CREATE TABLE `table_with_limit` 
   `id` int(11) DEFAULT NULL
) ENGINE=InnoDB MAX_ROWS=100000
Run Code Online (Sandbox Code Playgroud)

但是MAX_ROWS属性不是一个硬限制("存储不超过100 000行并删除其他")但是数据库引擎提示此表将至少有10万行.

我看到解决问题的唯一可能方法是使用BEFORE INSERT触发器来检查表中的行数并删除旧行.但我很确定这是一个巨大的过热:/

另一个解决方案是每N分钟使用cron脚本清除表.这是最简单的方法,但仍需要另一个系统来监视.

谁知道更好的解决方案?:)

Dev*_*art 11

尝试限制向表中添加新记录.要添加新记录时引发错误.

DELIMITER $$

CREATE TRIGGER trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
  SELECT COUNT(*) INTO @cnt FROM table1;
  IF @cnt >= 25 THEN
    CALL sth(); -- raise an error
  END IF;
END
$$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

请注意,对于大型InnoDb表,COUNT操作可能会很慢.

在MySQL 5.5上,您可以使用SIGNAL // RESIGNAL语句来引发错误.


小智 5

  • 创建一个包含100,000行的表.
  • 在过去使用"时间戳"预填充其中一个字段.
  • 选择最旧的记录,在"创建"(更新)记录时更新"时间戳".
  • 仅使用选择和更新 - 永远不要使用插入或删除.
  • "时间戳"字段的反向索引使选择/更新快速.

  • 当达到上限时,这似乎比插入和截断表要多得多。 (2认同)