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

apakah ini mengunci database?

Bagi saya, dokumentasinya agak kurang jelas:

Metode Penguncian Internal menyarankan bahwa, dalam beberapa keadaan, dimungkinkan untuk menyisipkan ke dalam tabel MyISAM saat sesi lain sedang membaca darinya:

Namun, Masalah Penguncian Tabel menunjukkan situasi di mana tabel akan dikunci sampai SELECT selesai (ini sesuai dengan situasi Anda):

Tabel InnoDB menerapkan kunci tingkat baris, jadi hanya baris yang sedang dibaca yang akan dikunci, bukan seluruh tabel.

Daripada hanya mengandalkan dokumentasi, saya mencoba sedikit tes:

  1. Buat dua tabel dengan struktur yang sama:table_a dan table_b .
  2. Isi table_a dengan 500.000 baris.
  3. Salin data dari table_a ke table_b menggunakan INSERT INTO ... SELECT pernyataan.
  4. Selama proses penyalinan, gunakan sesi lain untuk menyisipkan baris baru ke dalam table_a .
  5. Periksa apakah table_b berisi rekor baru.

Ketika kedua tabel tempat MyISAM, table_b tidak berisi catatan baru setelah salinan. Ketika kedua tabel tempat InnoDB, table_b memang berisi catatan baru setelah salinan. Saya telah mengulangi ini tiga kali, dan, seperti yang diharapkan, hasilnya sama setiap kali.

Jadi, singkatnya, jika meja Anda adalah MyISAM, itu akan dikunci. Jika itu InnoDB, tidak akan. Tentu saja, tes ini tidak mempertimbangkan pembaruan, tetapi saya berharap hasilnya akan serupa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengganti fungsi UUID Versi 1 MySQL?

  2. Tomcat JDBC Conencton Pool + MySQL memberikan masalah pipa Rusak, bahkan dengan validasi koneksi

  3. Menggunakan JDeveloper dengan Database MySQL dan Database Oracle di AWS RDS, Bagian 1

  4. Node.js tidak dapat mengautentikasi ke MySQL 8.0

  5. Hibernate mengirim pertanyaan alien ke database