Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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, так как вам придется иметь заранее определенные действия (например, не разрешать ли запись, мы обрезаем таблицу? и т.д.).