sql >> Database teknologi >  >> RDS >> PostgreSQL

mysql_insert_id alternativ til postgresql

Fra PostgreSQL synspunkt, i pseudo-kode:

 * $insert_id = INSERT...RETURNING foo_id;-- only works for PostgreSQL >= 8.2. 

 * INSERT...; $insert_id = SELECT lastval(); -- works for PostgreSQL >= 8.1

 * $insert_id = SELECT nextval('foo_seq'); INSERT INTO table (foo...) values ($insert_id...) for older PostgreSQL (and newer PostgreSQL)

pg_last_oid() virker kun hvor du har OID'er. OID'er har været slået fra som standard siden PostgreSQL 8.1.

Så afhængigt af hvilken PostgreSQL-version du har, bør du vælge en af ​​ovenstående metoder. Ideelt set skal du selvfølgelig bruge et databaseabstraktionsbibliotek, som abstraherer ovenstående. Ellers ser det i lavniveaukode ud som:

Metode 1:INDSÆT... RETURNERER

// yes, we're not using pg_insert()
$result = pg_query($db, "INSERT INTO foo (bar) VALUES (123) RETURNING foo_id");
$insert_row = pg_fetch_row($result);
$insert_id = $insert_row[0];

Metode to:INDSÆT; lastval()

$result = pg_execute($db, "INSERT INTO foo (bar) values (123);");
$insert_query = pg_query("SELECT lastval();");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];

Metode tre:nextval(); INDSÆT

$insert_query = pg_query($db, "SELECT nextval('foo_seq');");
$insert_row = pg_fetch_row($insert_query);
$insert_id = $insert_row[0];
$result = pg_execute($db, "INSERT INTO foo (foo_id, bar) VALUES ($insert_id, 123);");

Det sikreste bud ville være den tredje metode, men den er uhåndterlig. Den reneste er den første, men du skal køre en nylig PostgreSQL. De fleste db abstraktionsbiblioteker bruger dog endnu ikke den første metode.



  1. Hvordan kan jeg indsætte data i en MySQL-database?

  2. SQLite Bestil efter dato1530019888000

  3. Konverter SQLITE SQL dump-fil til POSTGRESQL

  4. Forskellige planer for identiske servere