ho inserito manualmente due nuovi record impostazione l'id come max (id) + 1 * *
Questo approccio è completamente sbagliato e non funzionerà nel database. Ha funzionato per te finora in MySQL solo per pura fortuna.
Se due connessioni eseguono contemporaneamente questo, otterranno lo stesso ID. Può funzionare in modo affidabile solo se blocchi la tabella da letture contemporanee in modo che solo una connessione possa ricevere un ID alla volta.
È anche terribilmente inefficiente.
Questo è il motivo per cui esistono sequenze, in modo che sia possibile ottenere in modo affidabile ID in presenza di inseritori simultanei.
Basta usare:
INSERT INTO my_table(data1, data2) VALUES ('a','b') RETURNING id;
o:
INSERT INTO my_table(id, data1, data2) VALUES (DEFAULT, 'a','b') RETURNING id;
DEFAULT
è una speciale segnaposto che raccontano il database per ottenere il valore predefinito per quella colonna dalla definizione della tabella. L'impostazione predefinita è nextval('my_table_id_seq')
, quindi verrà inserito il valore della sequenza successiva.
Poiché si stanno facendo domande di base sulle sequenze, si consiglia inoltre di considerare che le sequenze non siano prive di spazio. È normale che le sequenze abbiano "buchi", in cui i valori della tabella vanno 1, 3, 4, 5, 9, 10, ....
fonte
2013-08-23 00:57:01
Serial è PostgreSQL questo intero a quattro byte autoincrementante, NON si devono generare i propri numeri se l'ID è seriale. in MySQL questa è una colonna AUTO_INCREMENT più o meno .. –