2011-01-28 2 views
0

Я хочу сохранить только последние 200 данных (если 201 данные идут, значит, мне нужно удалить 1 строку и т. Д.) В таблицу в базе данных. Есть ли какая-нибудь логика?Ограничение строк базы данных

Благодаря

ответ

0

Я не думаю, что вы можете сделать это в одном операторе. Предположим, что таблица имеет столбец первичного ключа '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.

0

Как уже упоминалось, это, вероятно, невозможно сделать это в одном если вы не можете обновить таблицу, которую вы выбираете, используйте одно поле флага символа, которое устанавливается, когда строка должна быть помечена как удаленная, поэтому отмеченные строки могут быть проигнорированы операциями выбора и очищены отдельной рутиной.

Смежные вопросы