Как ведут себя данные при удалении?

Ссылка скопирована
1 ответ

Представим, что у меня есть таблица с 10 записями, и я удаляю первые 3 записи (строки) из таблицы. Затем сразу после этого вставляются новые 4 записи (строки) в таблицу.
Cмещаются ли оставшиеся 4-10 записи вверх, занимая место удаленных 1-3 записей, и новые 4 записи вставляются на места 8-11, или сначала 3 из 4 новых записей займут места 1-3, а 4 запись будет внесена в 11 строку?

Дополнительно:

В реляционных БД не существует гарантий относительно порядка записей внутри таблицы. Этот порядок
- это особенности технической реализации хранения данных внутри блоков и сегментов. Это - "know how"
и это будет зависеть от типа DBMS (Postgres, MySQL, Oracle) и от типа таблицы (heap, index-organized, clustered e.t.c)

Если говорить грубо, то записи (data-rows) лежат не плотно а вразнобой с пробелами с выравниванием
к блокам. Ну тоесть вообще-вообще не так как в Excel. Удаление data-rows в Postgres насколько я помню
физически не удаляет запись а помечает ее мертвой используя служебные поля. Впоследствии VACUUM
делает работы по уплотнению.

Поэтому порядок ты сам обеспечиваешь, делая запрос с опцией ORDER BY some_date_time.

  • Понял! Благодарю Вас за подробный ответ!

Ответы:

СУБД до лампочки, в каком порядке хранить записи таблиц. Внутренняя логика лишь контролирует, чтобы чрезмерная перезапись данных не приводила к расползанию физических файлов СУБД, и то требуется внимание администратора.
Порядок вывода записей вы задаете, когда хотите их, собственно, вывести. В любом месте запроса, где вы хотите оценить вес строки по порядку, вы, обязательно, воспользуетесь клаузой order by. Чтобы было по каким признакам сортировать, при проектировании схемы базы данных разработчик сам должен позаботиться, какими свойствами снабдить записи, чтобы можно было проводить сортировку. Можно элементарно сортировать по ID записи (первичному ключу), или оставлять датированные метки, или по алфавиту какого-нибудь текстового поля, иногда нужно отдельное числовое поле, чтобы принудительно задать свой порядок сортировки, не подходящий ни под один признак естественной сортировки других полей записи.
Чтобы СУБД быстро отрабатывала вывод по критериям order by, лучше снабдить сортируемые поля индексами (индекс - это отдельный объект СУБД). Индексами как раз обеспечивается "магия" быстрого доступа к записям.
Именно с ними случается вот эти действия, что вы описали в вопросе, когда происходит вставка, обновление, удаление записей:

Cмещаются ли оставшиеся 4-10 записи вверх, занимая место удаленных 1-3 записей, и новые 4 записи вставляются на места 8-11, или сначала 3 из 4 новых записей займут места 1-3, а 4 запись будет внесена в 11 строку?

Только работа ведется не с линейным списком, а с переворачиванием такой структуры, как B-дерево.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

При удалении данных в различных языках программирования, поведение может отличаться в зависимости от специфики языка и типа данных.

В языке программирования PHP, например, при удалении переменной данные в ней будут уничтожены, и переменная будет освобождена. Это означает, что данные, которые были хранятся в переменной, больше не будут доступны для использования. Пример:

$myVar = "Hello, World!";
unset($myVar);
echo $myVar; // выведет ошибку, так как переменная $myVar была удалена

$myVar = "Hello, World!"; unset($myVar); echo $myVar; // выведет ошибку, так как переменная $myVar была удалена

При удалении элемента из массива в PHP, элемент будет удален из массива, и индексы всех последующих элементов будут переиндексированы. Пример:

$myArray = [1, 2, 3, 4, 5];
unset($myArray[2]);
print_r($myArray); // выведет [1, 2, 4, 5]

$myArray = [1, 2, 3, 4, 5]; unset($myArray[2]); print_r($myArray); // выведет [1, 2, 4, 5]

В других языках программирования, таких как JavaScript, при удалении переменной данные в ней также уничтожаются. Однако в отличие от PHP, в JavaScript при удалении элемента из массива, индексы остаются без изменений. Пример:

let myArray = [1, 2, 3, 4, 5];
delete myArray[2];
console.log(myArray); // выведет [1, 2, empty, 4, 5]

let myArray = [1, 2, 3, 4, 5]; delete myArray[2]; console.log(myArray); // выведет [1, 2, empty, 4, 5]

В целом, при удалении данных в программах следует быть осторожным, чтобы избежать ошибок и нежелательного поведения программы. Важно понимать, как именно работает операция удаления в конкретном языке программирования, чтобы избежать непредвиденных последствий.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно