表的结构为:linkid varchar(30),
smsid int(4),
uptime datetime,
1 我想控制其表只保存最近1个小时的数据。这个如何做?2 如果这个需求不方便实现的话,也可以只保留我设置的一个最大记录数。比如我希望表内最多只保存3000条数据。看mysql文档说可以在CREATE TABLE语句中指定一个MAX_ROWS表选项。通过这个选项我是否可以使得记录数量只保留3000条?并且如果记录数量到达了3000条并不是无法继续插入数据了,而是会将时间最早的数据清除掉,就是类似栈的结构,使数据按顺序出栈?3 内存表的内存占用计算公式我查了mysql的手册,为SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) * 4)+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) * 2)+ ALIGN(length_of_row+1, sizeof(char*))。但还是没看明白,请问我这样的表结构,如果有3000条数据的话大概占多少内存。谢谢
smsid int(4),
uptime datetime,
1 我想控制其表只保存最近1个小时的数据。这个如何做?2 如果这个需求不方便实现的话,也可以只保留我设置的一个最大记录数。比如我希望表内最多只保存3000条数据。看mysql文档说可以在CREATE TABLE语句中指定一个MAX_ROWS表选项。通过这个选项我是否可以使得记录数量只保留3000条?并且如果记录数量到达了3000条并不是无法继续插入数据了,而是会将时间最早的数据清除掉,就是类似栈的结构,使数据按顺序出栈?3 内存表的内存占用计算公式我查了mysql的手册,为SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) * 4)+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) * 2)+ ALIGN(length_of_row+1, sizeof(char*))。但还是没看明白,请问我这样的表结构,如果有3000条数据的话大概占多少内存。谢谢
示例:
DELIMITER $$DROP TRIGGER /*!50032 IF EXISTS */ `zz`.`gg`$$CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `zz`.`gg` AFTER INSERT ON `zz`.`bbb`
FOR EACH ROW BEGIN
if (select count(*) from bbb)>9 then
delete from bbb where cid=new.cid;
end if;
END;
$$DELIMITER ;
2、MAX_ROWS没有用;3、不建议用内存表,除非内存非常在,用临时表存储。
2.MAX_ROWS现在还不起作用。
3.内存表的大小是按照max_heap_table_size来计算的。表结构保存在磁盘上,占了很少的一部分。注意:临时表尽量少用。
然后插入数据。不过我感觉每次插入如果都加这么个判断的话有点不爽。不知道mysql内部有没有这种现成的栈结构。另外,如果是怕数据丢失的话,我觉得临时表似乎比内存表更容易丢失吧,临时表在mysql断开连接后就会丢失,虽然相比之下它更容易恢复一些。