Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 16.02.2005 Ostrzeżenie: (0%)
|
chodzi mi o to że do bazy danych wkładam, przy pomocu php jakiś rekord
tab1 ma oczywiście pole typu serial tab1_id, które generuje się automatycznie. potrzebuję uzyskać szybko tab1_id własnie wkładanego/włożonego elementu czy jest na to inny sposob niz zadanie selecta do bazy: Kod select tab1_id from tab1 where wart1='.$cos1 ... ? Ten post edytował nie ja 30.10.2005, 17:09:36 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 31.03.2002 Skąd: Toruń Ostrzeżenie: (0%)
|
Wyciąganie currval dopiero PO wstawieniu rekordu może spowodować taką sytuację: Klienci A i B jednocześnie wstawiają rekord do bazy:
1. Klient A wstawia rekord. Zwiększana jest aktualna wartość sekwencji (np. na 11). 2. Klient B wstawia rekord. Zwiększana jest aktualna wartość sekwencji (np. na 12). 3. Klient A wyciąga currval - otrzymuje 12. 4. Klient B wyciąga currval - otrzymuje 12. Wydaje mi się, że lepiej zrobić tak: Najpierw klient wyciąga nextval('nazwa_sekwencji'). Nextval za jednym zamachem zwiększa wartość sekwencji i zwraca tę zwiększoną wartość, zatem klient od razu rezerwuje i otrzymuje unikatową wartość, np. 11. Następnie klient wstawia rekord, podając wyciągnięte przed chwilą ID: INSERT INTO tabela(id, pole1, pole2) VALUES(11, "xyz", "abc") W styuacji z dwoma klientami będzie to wyglądać tak: 1. Klient A wyciąga nextval('nazwa_sekwencji') i otrzymuje np. 11. 2. Klient B wyciąga nextval('nazwa_sekwencji') i otrzymuje 12. 3. Klient A wstawia rekord, podając ID wyciągnięte w swoim kroku 1: INSERT INTO tabela(id, pole1, pole2) VALUES(11, "xyz", "abc") 4. Klient B wstawia rekord, podając ID wyciągnięte w swoim kroku 2: INSERT INTO tabela(id, pole1, pole2) VALUES(12, "pqr", "qwe") I wszystko jest tak jak chcieliśmy. SERIAL w PgSQL to tak naprawdę nie jest typ danych. W momencie tworzenia tabeli z kolumną K "typu" SERIAL tworzona jest sekwencja na podstawie nazwy tabeli, następnie typ kolumny K jest ustawiany na integer, a kolumnie K jako default przypisywane jest wyrażenie nextval('nazwa_sekwencji'). Jest to opisane tutaj: http://www.postgresql.org/docs/8.0/interac...DATATYPE-SERIAL Ten post edytował msulik 1.11.2005, 18:24:38 |
|
|
|
nie ja id ostatnio włożonego elementu 30.10.2005, 12:31:23
nospor Bardziej mi to pasue na Bazki niz na php. PRzenosz... 30.10.2005, 14:26:04
nie ja znalazłam już odpowiedź napiszę, moze się komuś j... 30.10.2005, 14:50:12 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 22:06 |