Auto_increment и проверка на пустые строки

  • Автор темы zloi
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z

zloi

Гость
#1
Вспомнил, есть еще один вопросик. Предположим есть такая таблица:

1 ! раз
2 ! два
3 ! три
...
и тд.
ну соответственно цифирки это AUTO_INCREMENT. В связи с этим есть вопрос. При удалении допустим 2-й записи по умолчанию данные добавляются в конец (те 4, 5, 6 и тд). Как сделать проверку на пустые строки и добавлять не в конец таблицы, а сначала в пустые строки, а только если их нету, тогда в конец.
 
D

diff

Гость
#2
vse verno, po umolchaniu vse dobovlyaetsya v konec tablicy. esli vam princypial'no dobovlyat' vse po poryadku, to na moi vzglyad luchei realizaciei budet ne udalenie a ochistka polei.

naprimer u nas est'
id ! name
1 ! раз
2 ! два
3 ! три
4 ! chetyre
5 ! pyat'

ochistili 3-e znachenie(vmesto delete delaem update), togda my imeem
id ! name
1 ! раз
2 ! два
3 !
4 ! chetyre
5 ! pyat'

shtoby naiti stroki s pustymi znacheniyami i vstavit' tuda dannye my delaem sledushee
Код:
SELECT id FROM our_table WHERE name='' ORDER BY id ASC LIMIT 1; #id=3
UPDATE our_table SET name='sto' WHERE id=3
poluchaem
id ! name
1 ! раз
2 ! два
3 ! sto
4 ! chetyre
5 ! pyat
 
Z

zloi

Гость
#3
to sax_ol
то есть вы предлагаете ничего не делать, и допустить непомерное разрастание таблицы?

просто есть небольшой нюанс: поле под счетчик МАКСИМУМ трехзначный, соответственно максимальное количество записей 999, так ведь?
 
D

diff

Гость
#4
Не болтайте ерундой. И не предлагайте ерунду.
Для: zloi
Не надо ничего проверять, СУБД сама знает что делает, не мешайте ей.
erundoi zanimaetes' vy, t.k. mnogo krika iz nichego!
ya je predlojil reshenie, kotoroe otvechaet trebovaniyam TS, nikto nigovorit, shto tak nujno delat', no esli nujno dlya samoobrazovaniya ili dlya sebya napisat' script, to mojno i tak, hotya podhod deistvitel'no iznachal'lno neverny.
 
Z

zloi

Гость
#5
блин, народ, может завязывайте ругаться, а?

to sax_ol
именно это я и хочу сказать. интерес просто у меня достаточно академический. если действительно есть такие ограничения по таблице, то как это сделать?
 
D

diff

Гость
#6
Для: diff
Про какое ТЗ речь? Вы где его тут узрели? Автор и сам пока не понимает а предполагает, да и на проясняющие вопросы пока ответа нет.
Vy pravy, TZ deistvitel'no net, TS - topic starter(t.e. v dannom sluchae zloi). dumau my smojem pomoch' zlomu v reshenii ego voprosa, esli on vylojit svoi script i na primere dvuh variantov(moego ne pravil'nogo i vashego) my pokajem, dlya chego nujen autoincrement i kak snim rabotat', shtoby v budushem, ne voznikalo podobnyh tem :blink:
 
M

maykoff

Гость
#8
Как ещё один вариант -
select * from table -> в массив
затем
truncate table
затем на основании массива
insert into table (fields) (values),(values)...

ИМХО - лишнее.
Согласен с sax_ol
Не надо ничего проверять, СУБД сама знает что делает, не мешайте ей.
Если нужен какой-то порядок в базе (например - порядок вывода записей) - лучше использовать для этого отдельное поле (unique) - скажем, микросекунды или random. Тогда, поменяв эти поля у двух записей и выбрав записи order by ... - вы на выводе поменяем их местами. Таким образом часто реализуется порядок пунктов в меню CMS

И ещё - сюда же:
Команда OPTIMIZE TABLE должна использоваться после удаления большей части таблицы или если в таблице было внесено много изменений в строки переменной длины (таблицы, в которых есть столбцы VARCHAR, BLOB или TEXT). Удаленные записи поддерживаются при помощи связного списка, и последующие операции INSERT повторно используют позиции старых записей. Чтобы перераспределить неиспользуемое пространство и дефрагментировать файл данных, можно воспользоваться командой OPTIMIZE TABLE.
 
Статус
Закрыто для дальнейших ответов.