Как установить максимальное количество строк в таблице 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-скрипта каждые N минут. Это самый простой способ, но для этого нужна еще одна система.

Кто-нибудь знает лучшее решение? 🙂

Попробуйте сделать ограничение на добавление новой записи в таблицу. Поднимите ошибку, когда будет добавлена ​​новая запись.

 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 // RESIGNAL для повышения ошибки.

  • Создайте таблицу со 100 000 строк.
  • Предварительно заполните одно из полей «меткой времени» в прошлом.
  • Выберите самую старую запись, обновите «отметку времени» при записи «создания» (обновления).
  • Используйте только select и update – никогда не используйте insert или delete.
  • Обратный индекс в поле «отметка времени» делает выбор / обновление быстрым.

Невозможно ограничить максимальное количество строк таблицы в MySQL, если только вы не пишете Trigger для этого.

Я просто откликаюсь от головы. Мое предположение заключается в том, что вы хотите что-то вроде «ведра», где вы помещаете записи, и что вы хотите его очистить, прежде чем он наберет определенное количество записей.

После инструкции insert запустите SELECT LAST_INSERT_ID(); который даст вам автоматический прирост идентификатора записи. Да, вам еще нужно запустить дополнительный запрос, но он будет мало ресурсоемким. Как только вы достигнете определенного счета, обрезайте таблицу и сбросьте идентификатор автоматического увеличения .

В противном случае у вас не может быть таблицы с «capped» в mysql, так как вам нужно было бы заранее определить такие действия, как (не разрешаем ли мы запись, мы обрезаем таблицу? И т. Д.).

Давайте будем гением компьютера.