Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Удаление записей в базе данных.

2.1K
30 декабря 2002 года
Orfey
7 / / 11.12.2002
Удаляются ли окончательно записи из БД, если выполнить DELETE FROM имя таблицы?
Если нет, то, как их удалить, так чтобы размер файла таблицы уменьшился?
358
30 декабря 2002 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Orfey
Удаляются ли окончательно записи из БД, если выполнить DELETE FROM имя таблицы?
Если нет, то, как их удалить, так чтобы размер файла таблицы уменьшился?


СУБД какая???Действительно в большинстве случаев данные не удаляются а только помечаются на удаление, а удаляются непосредственно при сжатии БД.Остальные рекомендации можно дать только зная СУБД.

1.7K
30 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Orfey
Удаляются ли окончательно записи из БД, если выполнить DELETE FROM имя таблицы?
Если нет, то, как их удалить, так чтобы размер файла таблицы уменьшился?


Это зависит от конкретной СУБД. Например, в Oracle delete надо утвердить commit'ом, который завершает транзакцию и сносит записи физически. В Visual FoxPro, если память не подводит, транзакция завершается отдельно, а логически удаленные записи сносятся отдельной командой. В dBase я так и не нашел как по-нормальному снести удаленные записи. То есть при работе с ODBC, при некоторых его настройках, были видны все записи, в том числе якобы удаленные навсегда. Всё может быть сложнее, если мы говорим о серверной СУБД. Тот же Oracle живет по своим правилам. И совсем необязательно, что удаление строки в 100 байт на столько же уменьшит файл данных. А ещё есть общий размер базы. Так что надо разбирать конкретную СУБД.

358
30 декабря 2002 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Mark

Это зависит от конкретной СУБД. Например, в Oracle delete надо утвердить commit'ом, который завершает транзакцию и сносит записи физически. В Visual FoxPro, если память не подводит, транзакция завершается отдельно, а логически удаленные записи сносятся отдельной командой. В dBase я так и не нашел как по-нормальному снести удаленные записи. То есть при работе с ODBC, при некоторых его настройках, были видны все записи, в том числе якобы удаленные навсегда. Всё может быть сложнее, если мы говорим о серверной СУБД. Тот же Oracle живет по своим правилам. И совсем необязательно, что удаление строки в 100 байт на столько же уменьшит файл данных. А ещё есть общий размер базы. Так что надо разбирать конкретную СУБД.


Насколько я помню, даже если ты в Оракуле потвердишь коммитом делет все равно физически запись не удалится, она всего-лишь будет помечена на удаление. Просто представь такую ситуацию: Запись твоя, дляной в 100 байт находится в первой трети 2 гиговой БД, тогда если после каждого delete - commit удалять запись физически нао будет создать временный файл куда скопировать всю инфу от начала БД до твоей записи, пропустить длину твоей

358
30 декабря 2002 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by moonmike

Насколько я помню, даже если ты в Оракуле потвердишь коммитом делет все равно физически запись не удалится, она всего-лишь будет помечена на удаление. Просто представь такую ситуацию: Запись твоя, дляной в 100 байт находится в первой трети 2 гиговой БД, тогда если после каждого delete - commit удалять запись физически нао будет создать временный файл куда скопировать всю инфу от начала БД до твоей записи, пропустить длину твоей


Сорри соскочило=(
Продолжаю:
твоей записи - 100 байт и копировать дальше все 8 гигов, сам понимаешь никто на такое не пойдет. Так что практически у всех СУБД физическое удаление осуществляется только в момент Restructure, PackTable и иже с ними.

1.7K
30 декабря 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by moonmike

Сорри соскочило=(
Продолжаю:
твоей записи - 100 байт и копировать дальше все 8 гигов, сам понимаешь никто на такое не пойдет. Так что практически у всех СУБД физическое удаление осуществляется только в момент Restructure, PackTable и иже с ними.


Да, согласен, неточно выразился. В первой фразе про Oracle читай "физическое удаление" как "невидимость для запроса", а во второй фразе - именно как удаление. К стати, в контексте вопроса надо наверное считать, что физическое удаление - это уменьшение файла данных. Так вот теже 100 байт в Oracle в конце таблицы тоже не особо понятно. Место под данные рспределяется не по 1 байту, что-то падает в логи, индексы опять же и т.п. Так что про серверные СУБД предлагаю вообще забыть.

2.1K
01 января 2003 года
Orfey
7 / / 11.12.2002
Цитата:
Originally posted by moonmike

СУБД какая???Действительно в большинстве случаев данные не удаляются а только помечаются на удаление, а удаляются непосредственно при сжатии БД.Остальные рекомендации можно дать только зная СУБД.



СУБД: Paradox 7 и dBase. Как сделать Restructure, PackTable и иже с ними.
p.s. какую субд dBase лучше использовать: dBase III+, dBase IV, dBase for Windows ?

358
04 января 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Orfey


СУБД: Paradox 7 и dBase. Как сделать Restructure, PackTable и иже с ними.
p.s. какую субд dBase лучше использовать: dBase III+, dBase IV, dBase for Windows ?


По логике конечно dBase IV круче чем III+, а тот что "for Windows" наверное еще круче. Но что-то мне говорит что на самом деле монопенисуально:D Посмотри просто кто позже выпушен, а потом юзай Парадокс=)))

317
04 января 2003 года
Relax
573 / / 20.09.2000
по-моему dBase - вообще лажа, Paradox лучше, а вообще еще лучше Access. Если с ним через ADO работать, то и BDE не нужен, да и базы ваять удобнее в MS Access чем в Database Desktop...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог