Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql — Mengunci baris untuk kueri pemilihan?

Penguncian MySQL asli tidak menyediakan fungsi ini. Anda dapat menggunakan kolom untuk melakukan "penguncian" Anda.

Dengan asumsi setiap utas memiliki ID unik, Anda dapat membuat kolom bernama thread_owner , dengan default 0.

Satu utas akan mengambil baris seperti ini:

UPDATE mytable
SET thread_owner = :my_threadID
WHERE thread_owner = 0
LIMIT 1

Kemudian pilih baris seperti ini (mungkin tidak menghasilkan apa-apa, jika tidak ada baris yang akan diproses):

SELECT *
FROM mytable
WHERE thread_owner = :my_threadID

Kemudian proses, dan terakhir hapus.

Solusi ini akan bekerja pada MyISAM dan InnoDB.

Namun, untuk InnoDB, mungkin lambat karena setiap pernyataan UPDATE mencoba mengunci semua baris di mana thread_owner =0, dan kecuali Anda yakin Anda mengunci semua baris dalam urutan yang sama setiap kali, itu bahkan bisa menyebabkan kebuntuan. Jadi, Anda dapat mencoba mengunci seluruh tabel secara eksplisit dalam pernyataan UPDATE Anda:

LOCK TABLES mytable WRITE;
UPDATE mytable
SET thread_owner = :my_threadID
WHERE thread_owner = 0
LIMIT 1;
UNLOCK TABLES;

Dengan begitu, MyISAM dan InnoDB akan bekerja dengan cara yang sama.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework membuat nama tabel jamak, tetapi tampilan mengharapkan nama tabel tunggal?

  2. Hash MD5 MySQL salah

  3. bagaimana cara menghapus/flush mysql innodb buffer pool?

  4. INSERT INTO .. ​​PADA DUPLICATE KEY UPDATE untuk beberapa item

  5. Bagaimana saya bisa membaca nilai dari mysql menggunakan PHP