MySQL « Добавить строку в конец таблицы.
Проблема походу пустяшная, но я SQL только начинаю изучать.
Смысл проблемы в том, что если удалить строку из бд, то новая строка встает на ее место а не в конец таблицы. А мне надо в конец... Как это лечиться? Заранее спасибо.
1 ответов
Это не лечится by design. Дело в том, что у таблицы нет начала и конца. Таблица в базе данных это абстракция, физически она может храниться как угодно: в одном или нескольких файлах на дисках, на нескольких дисках, в памяти или вообще не важно где. Таким образом, база данных сама решает в каком виде хранить данные. Базы данных обычно выбирают строки так, как им это сделать проще всего. Для случая хранения данных в файле на диске, проще всего - это читая последовательно файл, в результате обычного селекта без сортировки мы видим один и тот же порядок строк. Закладываться на него не стот (может измениться в результате реорганизации файла данных). А главное, по страндарту порядок вывода строк не гарантируется.
Если вам нужно закрепить порядок строк в порядке вставки, нужно его (порядок) явно указать при выборке с помощью order by. В качестве поля, по которому сортировать, можно взять поле ID, если номера возрастают с каждой новой записью. Либо завести специальное поле "дата и время вставки", но это хуже, плюс желательно на него еще повесить индекс.
Вообще по этому случаю в Oracle есть специальный хинт APPEND, который рекомендует базе данных не искать "дырки" вместо удаленных строк, а сразу писать в конец тейблспейса после последней строки. Применяется так:
Возможно в mySQL есть аналог этого хинта, не смог найти. В любом случае, не советую его применять. Он не предназначен для закрепления порядка строк. Привел его тут только ради примера.
С натяжкой понятно о чем вы. Структуру таблицы приведите. По всей видимости вам нужно почитать про order by и primary key