Я не думаю, что вы можете сделать это в одном утверждении. Предположим, что таблица имеет столбец первичного ключа «id», столбец данных «dataCol» и столбец отметки времени «dataTime». Вот подход (не проверенный), который удаляет самую старую строку всякий раз, когда количество строк превышает 200:
INSERT INTO t (dataCol, dataTime) VALUE ('data', NOW);
DELETE FROM t
WHERE 200 < (SELECT COUNT (*) FROM t)
AND id = (SELECT id FROM t ORDER BY dataTime LIMIT 1);
Если вы не собираетесь удалять данные по любой причине, за исключением того, что таблица заполнена, тогда возможен другой подход. (Понятия не имею, лучше ли это.) Начните с предварительного заполнения таблицы 200 записями. Затем создайте вторую таблицу с бухгалтерской информацией о том, что находится в первой таблице. Вторая таблица будет иметь одну строку, в которой хранится следующая информация:
- следующий слот для заполнения
- заполнена ли первая таблица
Идея состоит в том, что вы вставляете новые данные в первую таблицу по индексу, заданному второй таблицей, увеличиваете столбец слотов второй таблицы по модулю 200 и устанавливаете полный столбец на 1, когда первый раз указатель слота возвращается к 0 .