我需要在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