【发布时间】:2012-03-01 04:30:58
【问题描述】:
我有下表
+-----------+------------------+------+-----+---------+----------------+
| 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!即如果用户 ID 5 已经有 10 行,并且我正在插入一个新行,我需要在插入之前删除其中最旧的行。
有没有办法编写一个 SQL 语句来DELETEs 用户 ID 的所有条目,除了最近的 10 个条目。我知道如何将LIMIT 用于SELECT,但我看不到如何在DELETE 中实现LIMIT。
【问题讨论】:
-
似乎是使用trigger的完美案例
-
@Riki Lyng SQL 不直接提供此功能。正如 bfavaretto 所说,您可以添加一个触发器来删除或限制插入到您的表中。另一种方法是修改调用 MySQL 数据库以限制插入的代码
标签: mysql delete-row sql-delete sql-limit