我需要在MySQL表中设置行的最大限制。文档告诉我们可以使用以下SQL代码创建表:
CREATE TABLE table_with_limit
id
int(11) DEFAULT NULL ) ENGINE=InnoDB MAX_ROWS=100000 但是MAX_ROWS属性不是硬性限制(“存储不超过10万行并删除其他行”),而是数据库引擎的提示,该表将至少有10万行。
我看到的解决问题的唯一可能方法是使用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 ; 请注意,在大型InnoDb表上,COUNT操作可能很慢。
在MySQL 5.5上,您可以使用SIGNAL // RESIGNAL语句引发错误。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。