[ dmd @ 02.05.2007. 15:20 ] @
Verujem da je jednostavno(ja sam početnik).
Kada se napravi SQL baza i odredi ključ,prilikom unosa i brisanja
automatski se ne pomera broj na predhodno mesto.
Na primer ako obrišem red 7 ne mogu sledeće podatke nastaviti na mesto
sedam već se automatski pomera na 8(i ako nema više broja 7)
Da li se piše kod ili postoji jednostavno podešavanje?
[ mmix @ 02.05.2007. 15:48 ] @
Ne moze lako. Autoidentity polje nije updateable, morao bi svaki put da ga iskljucis i ponovo ukljucis uz veliki rizik da nesto zeznes. Key reuse je postojao u v6.5 SQLa ali je ukinut od v7 zbog problema sa data concurency.
Npr ako konekcija 1 i 2 kreiraju transakcije u niskom stepenu izolacije (read uncommited) i prva obrise red ID=7 i onda krene da radi druge stvari a za to vreme druga transakcija hoce da uradi insert uradice to sa ID=7 posto je on obrisan i samim tim slobodan a izolacija ne sprecava odredjivanje tog IDa, PK constraints su zadovoljene i ceka se na write operaciju. I zamisli da prva transakcija sad uradi rollback, vrati se red sa ID=7 oslobodi page lock i upise se jos jedan red sa ID=7 eto belaja.

Zato SQL 7+ imaju globalne countere za autoidentity polja i uvek idu unapred sta god da se desi sa vec "izdatim" brojem. Ako bas hoces da imas redove u redosledu, dodaj jos jedno polje i napravi svoj mehanizam (ali pazi na concurrency), bolje nego da se petljas sa ugradjenom logikom. Al ces opet imati probleme sa rupama u brojevima (ako se obrise red broj 12 u tabeli sa 100 redova)...
[ dmd @ 02.05.2007. 18:51 ] @
Mislio sam da je lako.
Hvala na objašnjenju.