Ограничьте вставки в таблицу MySQL до N строк

0

Я создал таблицу в MySQL.

Я хочу, чтобы в этой таблице хранилось всего 30 строк, а когда превышено 30 строк, скажем, 31 строка, тогда таблица должна удалить старые 30.

Возможно ли это в MySQL?

Я использовал следующий триггер, но он не работает со мной.

CREATE TRIGGER my_name
BEFORE INSERT ON try
FOR EACH ROW
BEGIN
    DECLARE cnt INT;

    SELECT count(*) INTO cnt FROM try;

    IF cnt = 30 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can store only 10 records.';
    END IF;
END;
  • 0
    Вы можете проверить эту проблему: Как я могу установить максимальное количество строк в таблице MySQL?
  • 0
    0. После создания столбца отметки времени .., 1. Вставьте 30 строк. 2. Запретить вставку. 3. И использовать обновление вместо
Показать ещё 9 комментариев
Теги:
mysql-workbench

2 ответа

-2
Лучший ответ

Вы можете использовать хранимую процедуру вместо обычного оператора INSERT. Хранимая процедура сначала добавит строку на основе входных параметров, а затем удалит старые строки, если это необходимо. См. Ниже пример. Возможно, вам придется настроить входные параметры для процедуры limitedInsert на основе столбцов таблицы.

Схема моего примера таблицы

CREATE TABLE IF NOT EXISTS 'test' (
  'id' int(1) NOT NULL AUTO_INCREMENT,
  'timestamp' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  'value' tinyint(4) NOT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Процедура

DELIMITER //
CREATE DEFINER='root'@'%' PROCEDURE 'limitedInsert'(
    IN 'parameter_1' INT
)
BEGIN
    DECLARE rowsNumber INT;
    DECLARE idToRemove INT;

    insert into test(value) values(parameter_1);
    select count(*) into rowsNumber from test;

    if rowsNumber > 30 then
        select id into idToRemove from test order by timestamp asc limit 1;
        delete from test where id = idToRemove;
    end if;
END//
DELIMITER ;

Вставка данных с использованием хранимой процедуры

call limitedInsert(2);
  • 0
    Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
0

На следующем экране показан результат ПОЛОЖЕНИЯ ПРОСМОТРА SHOW

screen1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню