[英]How can I set a maximum number of rows in MySQL table?
我需要在 MySQL 表中设置最大行数限制。 文档告诉我们可以使用以下 SQL 代码来创建表:
CREATE TABLE `table_with_limit`
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB MAX_ROWS=100000
但是MAX_ROWS
属性不是硬限制(“存储不超过 100 000 行并删除其他行”),而是对数据库引擎的提示,该表将具有至少 100 000 行。
我认为解决问题的唯一可能方法是使用BEFORE INSERT
触发器,它将检查表中的行数并删除较旧的行。 但我很确定这是一个巨大的过热:/
另一种解决方案是每 N 分钟用 cron 脚本清除表。 这是一种最简单的方法,但它仍然需要另一个系统来监视。
有人知道更好的解决方案吗? :)
尝试限制向表中添加新记录。 当要添加新记录时引发错误。
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 ;
请注意, COUNT 操作在大型 InnoDb 表上可能会很慢。
没有办法限制 MySQL 中表行的最大数量,除非你编写一个触发器来做到这一点。
我只是在脑子里编造一个答案。 我的假设是你想要一个像“桶”这样的东西,你可以在其中放入记录,并且你想在它达到某个记录数之前清空它。
在插入语句之后,运行SELECT LAST_INSERT_ID();
这将使您获得记录 ID 的自动增量。 是的,您仍然需要运行一个额外的查询,但这将是低资源密集型的。 一旦达到特定计数,请截断表并重置自动增量 id 。
否则你不能在 mysql 中有一个“封顶”表,因为你必须有预定义的操作(我们不允许记录,我们是否截断表?等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.