如何自动限制数据库中的行数?

时间:2012-02-08 17:28:46

标签: mysql delete-row sql-delete sql-limit

我有下表

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| ID        | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| userid    | int(10) unsigned | NO   | MUL | NULL    |                | 
| logintime | int(10) unsigned | NO   |     | NULL    |                | 
| loginIP   | int(4) unsigned  | NO   |     | NULL    |                | 
+-----------+------------------+------+-----+---------+----------------+

每次用户登录时,我都会在此表中插入一个新行,其中包含登录时间,IP地址等...

现在我想将每个用户的行数限制为10个!即如果userid 5有10行,我已经插入一个新行,我需要在插入之前删除其中最旧的一行。

有没有办法编写一个SQL语句,DELETE用户标识的所有条目,除了最近的10个。我知道如何将LIMIT用于SELECT,但我看不出如何在DELETE中实现LIMIT。

2 个答案:

答案 0 :(得分:4)

这些方面应该有效:

DELETE FROM
  table 
WHERE
 userID = xyz and id not in (
  SELECT id FROM table WHERE userID = xyz ORDER BY logintime DESC LIMIT 10
 )

- 已添加:其中userID = xyz

答案 1 :(得分:0)

DELETE from table
WHERE id NOT IN(
      SELECT id FROM table GROUP BY userid ORDER BY logintime DESC LIMIT 10)