2012-06-06 5 views
0

Как хранить только 10 строк в таблице MySQL? Старшие строки должны быть удалены при добавлении новой строки, но только после того, как таблица имеет 10 строк.Ограничение строк таблицы

Пожалуйста, помогите мне

+0

, что запрос вам нужно ??? Я не хочу, чтобы я хотел хранить только десять ... –

+1

@somebody нет необходимости в запросе. Более того, почему? Я никогда не удаляю ни одной школы мысли. Что произойдет, если вам нужна информация, которую вы удаляете в будущем? – Ben

+0

@triveni Если какой-либо ответ сработал для вас, тогда перейдите и установите флажок справа от этого ответа. –

ответ

1

Вы могли бы добиться этого с after insert триггером, удалите строку, в которой он является дата мин. например DELETE FROM myTable WHERE myTimestamp = (SELECT MIN (myTimestamp) FROM myTable), но это теоретически может удалить несколько строк в зависимости от детализации ваших обновлений.

У вас может быть инкрементальная последовательность и всегда просто удалять min этой последовательности.

Вопрос в том, почему вы хотите это сделать? Это немного необычное требование.

Базовый пример (не подтвержден/выполнен, у меня нет mySQL на этой конкретной машине) будет выглядеть примерно так.

CREATE TRIGGER CycleOldPasswords AFTER INSERT ON UserPasswords FOR EACH ROW 

    set @mycount = SELECT COUNT(*) FROM UserPasswords up where up.UserId = NEW.UserId; 

    if myCount >= 10 THEN 
     DELETE FROM UserPasswords up where up.Timestamp = (SELECT min(upa Timestamp) FROM UserPasswords upa WHERE NEW.UserId = upa.UserId) AND NEW.UserId = up.UserId; 
    END 
END; 
+0

По словам Джеффа, вы можете сохранить каждую строку, почему вы хотите удалить стариков? – zessx

+0

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

+0

Надеюсь, вы сравниваете хэши, а не сырые текстовые пароли ... Так что это составляет десять строк на пользователя? Я бы серьезно подумал о порядковом номере в этом случае, в триггере после вставки, удалите min последовательности, где id пользователя = идентификатор пользователя вставленной строки. Надеюсь, это имеет смысл. –

0

Вы можете извлечь последний вставленный идентификатор, когда вставлена ​​первая строка, и сохранить его в переменной. Когда вставлено 10 строк, удалите строку с идентификатором < id первой вставленной записи. Попробуйте.

0

первую очередь вставить все значения с помощью вставки запроса , а затем запустить этот запрос

delete from table_name where (cond) order by id desc limit 10 

необходимо указать идентификатор или время в одном столбце

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