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:
- Buat dua tabel dengan struktur yang sama:
table_a
dantable_b
. - Isi
table_a
dengan 500.000 baris. - Salin data dari
table_a
ketable_b
menggunakanINSERT INTO ... SELECT
pernyataan. - Selama proses penyalinan, gunakan sesi lain untuk menyisipkan baris baru ke dalam
table_a
. - 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.