włożeniu ręcznie dwóch nowych rekordów ustawienie identyfikator jako max (id) + 1 * *
To podejście jest całkowicie błędne i nie będzie działało w dowolnej bazie danych. Do tej pory działało to tylko dla ciebie w MySQL dzięki zwykłemu szczęściu.
Jeśli dwa połączenia jednocześnie uruchomią to, otrzymają ten sam identyfikator. Może działać niezawodnie tylko wtedy, gdy blokujesz tabelę przed równoczesnymi odczytami, dzięki czemu tylko jedno połączenie może uzyskać identyfikator w tym samym czasie.
Jest to również wyjątkowo nieefektywne.
Dlatego właśnie istnieją sekwencje, dzięki czemu można niezawodnie uzyskiwać identyfikatory w obecności współbieżnych insertera.
Wystarczy użyć:
INSERT INTO my_table(data1, data2) VALUES ('a','b') RETURNING id;
lub:
INSERT INTO my_table(id, data1, data2) VALUES (DEFAULT, 'a','b') RETURNING id;
DEFAULT
jest miejscem szczególnym posiadacza powiedzieć, że bazy danych, aby uzyskać wartość domyślną dla danej kolumny z definicji tabeli. Wartość domyślna to nextval('my_table_id_seq')
, więc zostanie wprowadzona kolejna wartość sekwencji.
Ponieważ zadajesz podstawowe pytania o sekwencje, polecam ci również, aby uważać, że sekwencje nie są bez przerwy. To normalne, że sekwencje mają "dziury", w których wartości w tabelach wynoszą 1, 3, 4, 5, 9, 10, ....
Serial to PostgreSQL to autoinkrementująca czterobajtowa liczba całkowita, NIE należy generować własnych liczb, jeśli id jest numerem seryjnym. w MySQL jest to kolumna AUTO_INCREMENT mniej więcej .. –