Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: roznica pomiedzy PostgreSQL a MySQL
Forum PHP.pl > Forum > Bazy danych
mhs
Witam serdecznie,

zastanawia mnie jedna roznica pomiedzy tymi dwoma SZBD.


Przykład: mam kod tworzacy tabele

MySQL:
  1. CREATE TABLE test (
  2. id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. imie VARCHAR(40) NOT NULL,
  4. PRIMARY KEY(id),
  5. UNIQUE INDEX test_index3242(imie)
  6. );


oraz PostgreSQL

Cytat
CREATE TABLE test (
    id SERIAL NOT NULL,
    imie VARCHAR(40) NOT NULL UNIQUE,
    PRIMARY KEY (id)
);


Następnie wykonuję następujące zapytania:

MySQL:
  1. mysql> INSERT
  2. INTO test (imie) VALUES ('Michal');
  3. Query OK, 1 row affected (0.03 sec)
  4.  
  5. mysql> INSERT
  6. INTO test (imie) VALUES ('Michal');
  7. ERROR 1062 (23000): Duplicate entry 'Michal' FOR KEY 2
  8.  
  9. mysql> INSERT
  10. INTO test (imie) VALUES ('Tomek');
  11. Query OK, 1 row affected (0.02 sec)



PostgreSQL:
  1. template1=# INSERT
  2. INTO test (imie) VALUES ('Michal');
  3. INSERT 17727 1
  4. template1=# INSERT
  5. INTO test (imie) VALUES ('Michal');
  6. ERROR: duplicate KEY violates UNIQUE constraint "test_imie_key"
  7. template1=#
  8. template1=#
  9. template1=#
  10. template1=# INSERT
  11. INTO test (imie) VALUES ('Tomek');
  12. INSERT 17729 1


Następnie:
  1. SELECT *
  2. FROM test
i wyniki:

MySQL:
Kod
+----+--------+
| id | imie   |
+----+--------+
|  1 | Michal |
|  2 | Tomek  |
+----+--------+
2 rows in set (0.01 sec)


PostgreSQL:
Kod
template1=# SELECT * FROM test;
  1 | Michal
  3 | Tomek


I moje pytanie jest następujące: dlaczego PostgreSQL w przypadku nieudanej proby dodania nowej pozycji (tutaj za sprawa UNIQUE) juz "rezewuje" klucz glowny o numerze 2 (w przeciwienstwie do MySQL'a).

Wlasciwie przy tego typu opecji wszystko jedno jaka wartosc bedzie mial klucz glowny, pytam tylko z czystej ciekawosci. Mam tutaj swoja teorie dlaczego tak sie dzieje, natomiast nie chcialbym zmyslac dlatego tez pytam. Moze ktos z Was wie jak to wyglada w innych SZBD.

Pozdrawiam.
SongoQ
W Postgresie nie ma inkrementacji pola tylko wywołanie sekwencji która jest zwiększana w momencie próby dodania rekordu do bazy danych.
mhs
Cytat(SongoQ @ 2005-07-14 15:48:41)
W Postgresie nie ma inkrementacji pola tylko wywołanie sekwencji która jest zwiększana w momencie próby dodania rekordu do bazy danych.

Piękne dzięki za odpowiedź.
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.