Я создал таблицу в 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;
Вы можете использовать хранимую процедуру вместо обычного оператора 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);
На следующем экране показан результат ПОЛОЖЕНИЯ ПРОСМОТРА SHOW