MySQL-如何限定一个表中某个字段相同记录的条数?

MySQL-如何限定一个表中某个字段相同记录的条数?

灵芸 发布于 2017-04-06 字数 185 浏览 1097 回复 3

比如有一个log表,其中有一个字段为 log_type ,主要记录了log的类型,现在想每种类型只记录1000条,如果当前类型的记录多于1000 条,就将新记录插入,删除最旧的一条记录,mysql 如何实现呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜无邪 2017-10-13 3 楼

写下我现在的实现方法:

delete from log where log_type = 1 order by id asc limit 1

上边这条sql可以删除一条最旧的记录,每次成功插入一条记录就执行这条,前提是当前记录数大于限制。

瑾兮 2017-05-05 2 楼

一个事务里面用两条Mysql语句实现

UPDATE `log` AS l INNER JOIN (SELECT log_type,COUNT(log_type) AS cnt,MIN(ctime) AS ctime FROM `log` GROUP BY log_type HAVING cnt > 1000) AS t SET l.is_delete = IF(l.ctime = t.ctime,1,0) WHERE l.log_type = t.log_type;
delete from `log` where is_delete = 1;

或者写个mysql的任务也可以

甜柠檬 2017-04-30 1 楼

这个SQL语句无法实现吧,你可以在应用层来做或者在写一个MySQL存储过程来操作,取出某个类型的数量,然后判断是否删除旧数据,总之都需要判断啦。