Ограничить количество строк, вставленных в таблицу БД MySQL - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно ограничить количество строк, вставляемых в таблицу моей БД.

Я хотел бы реализовать логику для проверки, достигнут ли предел при выполнении новой вставки: если макс.число записей достигнуто. Я удалю самую старую запись в таблице.

Я попытался реализовать это с помощью триггера, как предложено здесь , но я получаю ошибку:

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

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Внутри хранимой функции или триггера запрещено изменять таблицу, которая уже используется (для чтения или записи) оператором, который вызвал функцию или триггер.

MySQL не разрешает этосм. Ограничения Все другие основные СУБД поддерживают эту функцию, так что, надеюсь, MySQL скоро добавит эту поддержку.

В этом случае вы можете прагматически обрабатывать все, что пожелаете.

Before insert data just check total number of row of that table. If reach rows limit, then call delete method. 
0 голосов
/ 20 мая 2019

Прорабатывая мой комментарий, почему бы просто не заполнить таблицу, а затем только выполнить обновления?

* 1003 Е.Г. *

 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 |
+----+------+---------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...