PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres, perbarui, dan kunci pemesanan

Tidak ada ORDER BY di UPDATE perintah.
Tapi ada untuk SELECT . Gunakan penguncian tingkat baris dengan FOR UPDATE klausa dalam subkueri:

UPDATE foo f
SET    a = 1
FROM (
   SELECT b FROM foo
   WHERE  b IN (1,2,3,4)
   ORDER BY b
   FOR   UPDATE
   ) upd
WHERE f.b = upd.b;

Tentu saja, b harus UNIQUE atau Anda perlu menambahkan lebih banyak ekspresi ke ORDER BY klausa untuk membuatnya tidak ambigu.

Dan Anda perlu menerapkan perintah yang sama untuk semua UPDATE , DELETE dan SELECT .. FOR UPDATE pernyataan di atas meja.

Terkait, dengan detail lebih lanjut:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengatur nilai bidang variabel komposit menggunakan SQL dinamis

  2. tidak dapat menyimpan 0 atau 1 sebagai boolean laravel postgresql

  3. KESALAHAN:operator tidak ada:numerik ~* tidak diketahui

  4. Bagaimana POSITION() Bekerja di PostgreSQL

  5. Mengapa saya mendapatkan sintaks input yang tidak valid untuk tipe integer di postgresql saat mengimpor CSV?