PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

mysql_insert_id thay thế cho postgresql

Theo quan điểm của PostgreSQL, trong mã giả:

 * $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() chỉ hoạt động khi bạn có OID. OID đã bị tắt theo mặc định kể từ PostgreSQL 8.1.

Vì vậy, tùy thuộc vào phiên bản PostgreSQL bạn có, bạn nên chọn một trong các phương pháp trên. Tất nhiên, lý tưởng nhất là sử dụng một thư viện trừu tượng hóa cơ sở dữ liệu để trừu tượng hóa những thứ ở trên. Nếu không, ở mã cấp thấp, nó trông giống như:

Phương pháp một:CHÈN ... QUAY LẠI

// 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];

Phương pháp hai:INSERT; 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];

Phương pháp ba:nextval (); CHÈN

$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);");

Đặt cược an toàn nhất sẽ là phương pháp thứ ba, nhưng nó khó sử dụng. Cái sạch nhất là cái đầu tiên, nhưng bạn cần phải chạy một PostgreSQL gần đây. Mặc dù vậy, hầu hết các thư viện trừu tượng db vẫn chưa sử dụng phương pháp đầu tiên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tạo một chuỗi phân vùng PostgreSQL?

  2. Đã xảy ra lỗi khi cài đặt pg (0.17.1) và Bundler không thể tiếp tục

  3. pgp Dự đoán - Phân tích dự đoán trong PostgreSQL

  4. thứ tự cột trong câu lệnh SELECT * - được đảm bảo?

  5. Cách tính giá trị trung bình trong PostgreSQL