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

Mengunci baris tertentu di postgres

Jika Anda ingin mengunci tabel pada baris tertentu yang dipilih, Anda perlu LOCK FIRST mereka menggunakan FOR UPDATE / FOR SHARE pernyataan. Misalnya, dalam kasus Anda jika Anda perlu mengunci baris pertama, lakukan ini:

BEGIN;

LOCK TABLE person IN ROW EXCLUSIVE MODE;

-- BLOCK 1

SELECT * FROM person WHERE name = 'John' and money = 1 FOR UPDATE;

-- BLOCK 2

UPDATE person set name = 'John 2' WHERE name = 'John' and money = 1;

END;

Dalam BLOCK1 sebelum SELECT pernyataan Anda tidak melakukan apa-apa hanya memberi tahu database "Hei, saya akan melakukan sesuatu di tabel ini, jadi ketika saya melakukannya, kunci tabel ini dalam mode ini". Anda dapat memilih / memperbarui / menghapus baris mana pun.

Tapi di BLOCK2 ketika Anda menggunakan FOR UPDATE Anda mengunci baris itu ke transaksi lain ke mode tertentu (baca doc untuk lebih jelasnya). Akan dikunci sampai transaksi tersebut berakhir.

Jika Anda memerlukan contoh, lakukan tes dan coba lakukan SELECT ... FOR UPDATE di BLOCK2 sebelum mengakhiri transaksi pertama. Ini akan menunggu transaksi pertama berakhir dan akan memilih tepat setelahnya.

Saya menggunakannya dalam fungsi untuk mengontrol urutan dan itu bagus. Semoga Anda menikmati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa Rails 5 menambahkan metode nextval dalam file skema?

  2. Ubah tipe data kolom dari Teks ke Integer di PostgreSQL

  3. Bagaimana cara mengembalikan baris hasil kueri dalam fungsi PostgreSQL?

  4. Dapatkan n kategori yang dikelompokkan dan jumlahkan yang lain menjadi satu

  5. Permintaan induk/anak rekursif PostgreSQL