Как установить максимальное количество строк в таблице MySQL?
Мне нужно установить максимальный предел строк в моей таблице MySQL. Документация говорит нам, что для создания таблицы можно использовать следующий код SQL:
CREATE TABLE `table_with_limit`
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB MAX_ROWS=100000
Но свойство MAX_ROWS
не является жестким пределом ( "хранить не более 100 000 строк и удалять другие" ), но подсказка для механизма базы данных, что эта таблица будет иметь наименьшее 100 000 строк.
Единственный возможный способ решить проблему - использовать триггер BEFORE INSERT
, который будет проверять количество строк в таблице и удалять старые строки. Но я уверен, что это огромный перегрев:/
Другим решением является очистка таблицы cron script каждые N минут. Это самый простой способ, но для этого нужна еще одна система.
Кто-нибудь знает лучшее решение?:)
Ответы
Ответ 1
Попробуйте сделать ограничение на добавление новой записи в таблицу. Поднимите ошибку, когда будет добавлена новая запись.
DELIMITER $$
CREATE TRIGGER trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
SELECT COUNT(*) INTO @cnt FROM table1;
IF @cnt >= 25 THEN
CALL sth(); -- raise an error
END IF;
END
$$
DELIMITER ;
Обратите внимание, что операция COUNT может замедляться в больших таблицах InnoDb.
В MySQL 5.5 вы можете использовать SIGNAL для повышения ошибки.
Ответ 2
- Создайте таблицу со 100 000 строк.
- Предварительно заполните одно из полей
"штамп времени" в прошлом.
- Выберите самую старую запись, обновите "метку времени"
при создании записи (обновления).
- Используйте только select и update - никогда не используйте insert или delete.
- Обратный индекс в поле "отметка времени" делает
выберите/обновите быстро.
Ответ 3
Невозможно ограничить максимальное количество строк таблицы в MySQL, если вы не написали триггер, чтобы сделать это.
Ответ 4
Я просто собираюсь ответить от головы. Мое предположение заключается в том, что вы хотите что-то вроде "ведра", где вы помещаете записи, и что хотите его очистить до того, как он достигнет определенного количества записей.
После инструкции insert запустите SELECT LAST_INSERT_ID();
, который даст вам автоматическое увеличение идентификатора записи. Да, вам еще нужно выполнить дополнительный запрос, но он будет мало ресурсоемким. Когда вы достигнете определенного количества, обрезайте таблицу и reset идентификатор автоматического увеличения.
В противном случае у вас не может быть таблицы с "capped" в mysql, так как вам придется иметь заранее определенные действия (например, не разрешать ли запись, мы обрезаем таблицу? и т.д.).