mysql - 限制 MySQL 数据库表中插入的行数

标签 mysql database triggers

我需要限制在数据库表中插入的行数。

我想实现一个逻辑来检查执行新插入时是否达到限制:如果达到最大记录数,我将删除表中最旧的记录。

我尝试按照建议使用触发器来实现此操作 here ,但我收到错误:

ERROR 1442: 1442: Can't update table 'tableName' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

那么我该如何实现呢?

注意我使用的是 MySQL v5.7.25

最佳答案

详细说明我的评论,为什么不直接填写表格,然后只执行更新?

例如

 DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,val CHAR(1)
,ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

INSERT INTO my_table (val) VALUES ('a');
INSERT INTO my_table (val) VALUES ('b');
INSERT INTO my_table (val) VALUES ('c');

SELECT * FROM my_table;
+----+------+---------------------+
| id | val  | ts                  |
+----+------+---------------------+
|  1 | a    | 2019-05-20 09:54:09 |
|  2 | b    | 2019-05-20 09:54:15 |
|  3 | c    | 2019-05-20 09:54:19 |
+----+------+---------------------+
3 rows in set (0.00 sec)

UPDATE my_table SET val = 'd' ORDER BY ts, id LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

SELECT * FROM my_table;
+----+------+---------------------+
| id | val  | ts                  |
+----+------+---------------------+
|  1 | d    | 2019-05-20 09:54:37 |
|  2 | b    | 2019-05-20 09:54:15 |
|  3 | c    | 2019-05-20 09:54:19 |
+----+------+---------------------+

关于mysql - 限制 MySQL 数据库表中插入的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56216930/

相关文章:

PHP - MySQL 1.000.000 条记录查询优化

sql - Oracle 中的自愿事务优先级

数据库功能依赖分解

javascript - 是否可以通过触发器发送鼠标当前位置的 x 和 y 坐标。 ('mouseup')事件?

sql - 在触发器中使用插入值

android - 类型 <> 必须实现继承的抽象方法 AsyncTask.doInBackground(Object...)

mysql 多列索引不工作(如预期的那样)?

php - SQL 选择多个匹配行

database - 如何将 MSAccess 连接添加到 CodeIgniter 或 CakePHP?

sql - ORACLE SQL 触发器 - 未找到数据