Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nadanie id od nowa
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
ActivePlayer
potrzebuję nadac nowe id wszystkim rekordom w tabeli. chodzi o to aby kazdemu rekordowi nadac inne id, zaczynając od 1. jest opcja zrobic to 1 zapytaniem ?
tmk
Jeśli id ma być inne dla kazdego rekordu(zapewne tak, ale tego nie napisałeś winksmiley.jpg )to napisz pętlę w plpgsql'u (zwykły LOOP, albo For). Nie będzie to jedno zapytanie, ale poleci szybko
SongoQ
Gorzej bedzie jesli rekordy sa powiazane i PK zmieniasz.
sf
bo tak naprawde nikt nie ``porzadkuje`` indexow... bo po co ?
php programmer
poza tym jest przecież taka klauzula, że PRIMARY KEY się nie zmienia
nawet jak usuniesz to nie możesz dać nowego pola z id które już było
SongoQ
Cytat
poza tym jest przecież taka klauzula, że PRIMARY KEY się nie zmienia
nawet jak usuniesz to nie możesz dać nowego pola z id które już było


W jakiej bajce to przeczytales? co za pierdoly wypisujesz. Jesli nie podasz jakie id to prawda bedzie kolejne z sekwencji, a jesli
  1. INSERT
  2. INTO tab
  3. (id) VALUES (1)
to takie cos Ci zapisze.
Radze wczesniej zastanowić sie co pisesz.
php programmer
To było w bajce pt.
"SQL w mgnienu oka" (Ben Forta), Cytuję (strona 184-185):
Cytat
Dowolna kolumna tabeli może stać się kluczem głównym, o ile spełnia następujące warunki:
- Dwa wiersze nie mogą posiadać tej samej wartości klucza główneho
- Każdy z wierszy musi posiadać określony klucz główny
- Kolumny zawierające klucz główny nie mogą być modyfikowane ani aktualizowane
- Wartości klucza głównego nie można użyć ponownie. Jeśli usunięto wiersz z tabeli, żaden nowy wiersz nie może przyjąć usuniętej wartości klucza głównego

Widze, że co niektórzy na tym forum uwielbiają krytykować,
nawet do tego stopnia, że bezwiednie że podważają rasowych informatyków
(czyli Ben Forta)
SongoQ
Cytat
- Wartości klucza głównego nie można użyć ponownie. Jeśli usunięto wiersz z tabeli, żaden nowy wiersz nie może przyjąć usuniętej wartości klucza głównego

Mozna uzyc. Nie zrozumiales ideologi autora.

Pewne rzeczy sa teoria. Autor mial na mysli ze prawidlowo dla sekwenci id jest nadawane automatycznie i nie bedzie takiej sytuacji ze nagle nada sie takie id jakie juz bylo usuniete.

Prosty przyklad, z mojego PG:

Schemat:
  1. CREATE SEQUENCE a_id_seq
  2. INCREMENT 1
  3. MINVALUE 1
  4. MAXVALUE 9223372036854775807
  5. START 1
  6. CACHE 1;
  7.  
  8. CREATE TABLE a
  9. (
  10. id int4 NOT NULL DEFAULT NEXTVAL('a_id_seq'::regclass),
  11. a varchar(10),
  12. CONSTRAINT a_pkey PRIMARY KEY (id)
  13. );


Teraz INSERTY
  1. INSERT
  2. INTO a
  3. (a) VALUES ('asdfads');
  4. INSERT
  5. INTO a
  6. (a) VALUES ('asdfads');
  7. INSERT
  8. INTO a
  9. (a) VALUES ('asdfads');


Teraz zobacz sobie co masz w bazie
  1. SELECT *
  2. FROM a

Rekordy o id: 1, 2, 3

Nastepnie usuwamy pierwszy rekord:
  1. DELETE
  2. FROM a
  3. WHERE id = 1


Teraz zobacz sobie co masz w bazie
  1. SELECT *
  2. FROM a

Rekordy o id: 2, 3

No i nasze oczekiwane zapytanie ktore udowodni ze tak nie jest
  1. INSERT
  2. INTO a
  3. (id, a) VALUES (1, 'asdfads');

Nie ma bledu.

Teraz zobacz sobie co masz w bazie
  1. SELECT *
  2. FROM a

Rekordy o id: 1, 2, 3

Podsumowujac, trzeba umiec czytac ze zrozumieniem. Tekst wyrwany z danej ksiazki czy art nic nie znaczy jesli sie nie wie czego dotyczy temat. Nie sadze zeby autorowi chodzilo o to o czym ty pisales. Bo tego nie zabraniaja mechanizmy bazy.
php programmer
no to co z tego, że mechanizmy bazy tego nie zabraniają,
to nie jest żaden argument,

poza tym przecież nie przepiszę tu całej książki żeby cię przekonać
dlatego napisałem fragment
SongoQ
Cytat
no to co z tego, że mechanizmy bazy tego nie zabraniają,
to nie jest żaden argument

Sprawdzales moje zapytania?
To ze jesli nie zabraniaja to znaczy ze sie mylisz i jesli autorowi dokladnie chodzilo o to co Tobie to sie myli tak samo jak ty, ale nie moge tego stwierdzic, bo kawalek tekstu o niczym nie swiadczy. Ale jestem w 100% przekonany ze autor mial na mysli inna zasade niz to o czym jest temat. Radze zebys ten tekst przeczytal w calosci kilka razy i przemyslal to.

Po powyzszej odpowiedzi, co co napisze moze byc troche obrazliwe ale odbieram Twoje posty jak posty invx.
mike
~php programmer robisz z siebie błazna wykazując postawę krowy z miedzy (bez obrazy): "głupty gadam i zadania nie zamienię, choćby wszyscy mi mówili jak bardzo wielkie głupoty gadam, i dalej muuuuczę swoje"

Postanowiłem zamknąć ten wątek tylko z jednego powodu, od bajek które tu czytam z Twoich ust mózg się lasuje.

~Active jeśli któraś z odpowiedzi, które tutaj padły CIę zadowala to spoko, ale jeśli chcesz dopytać o coś, lub najnormalniej kontynuować ten wątek to bez problemu go otworzę.

Zamykam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.