sql >> Databasteknik >  >> RDS >> PostgreSQL

PHP:PGSQL-drivrutin och AutoCommit?

För det första finns det inget AutoCommit-läge i PostgreSQL och pg_*-funktionerna i PHP API försöker inte efterlikna en.

pg_querys dokument säger

Så det garanterar att pg_query("UPDATE1 ..; UPDATE2...") körs i en transaktion och har en allt-eller-inget-effekt på data.

Sekvensen

pg_query("BEGIN");
pg_query("UPDATE1...");
pg_query("UPDATE2..");
pg_query("COMMIT");

motsvarar pg_query("UPDATE1 ..; UPDATE2...") med hänsyn till dataintegritet (halvfärdigt tillstånd kan inte hända).

När det gäller noteringen "om det inte finns explicit BEGIN/COMMIT...", är den endast relevant om dessa inte finns i början och slutet av hela kedjan av SQL-satser. Det vill säga pg_query("BEGIN; update1; update2; COMMIT;"); motsvarar pg_query("update1; update2;") men (uppenbarligen) inte likvärdig med pg_query("update1; COMMIT; update2;")




  1. Mysql-täckning vs sammansatt vs kolumnindex

  2. MySQL TIMESTAMP till QDateTime med millisekunder

  3. mysql:mycket enkelt SELECT id ORDER BY LIMIT kommer inte att använda INDEX som förväntat (?!)

  4. Söker efter ett tomt resultat (PHP, PDO och MySQL)