Mysql
 sql >> Database >  >> RDS >> Mysql

questo blocca il database?

Per me, la documentazione è un po' poco chiara:

Metodi di blocco interno suggerisce che, in alcune circostanze, è possibile inserire in una tabella MyISAM mentre un'altra sessione sta leggendo da essa:

Tuttavia, Problemi di blocco delle tabelle mostra una situazione in cui la tabella sarà bloccata fino al completamento di SELECT (questo si adatta alla tua situazione):

La tabella InnoDB implementa i blocchi a livello di riga, quindi solo la riga letta verrà bloccata, anziché l'intera tabella.

Invece di fare affidamento solo sulla documentazione, ho provato un piccolo test:

  1. Crea due tabelle con la stessa struttura:table_a e table_b .
  2. Compila table_a con 500.000 righe.
  3. Copia i dati da table_a a table_b utilizzando un INSERT INTO ... SELECT dichiarazione.
  4. Durante il processo di copia, usa un'altra sessione per inserire una nuova riga in table_a .
  5. Controlla se table_b contiene il nuovo record.

Quando entrambe le tabelle erano MyISAM, table_b non conteneva il nuovo record dopo la copia. Quando entrambe le tabelle erano InnoDB, table_b conteneva il nuovo record dopo la copia. L'ho ripetuto tre volte e, come previsto, il risultato è stato lo stesso ogni volta.

Quindi, in breve, se il tuo tavolo è MyISAM, sarà bloccato. Se è InnoDB, non lo farà. Naturalmente, questo test non considera gli aggiornamenti, ma mi aspetto che i risultati saranno simili.