sql >> Database >  >> RDS >> Mysql

Voorkom lezen bij het bijwerken van de tabel

Ervan uitgaande dat u een transactie-engine gebruikt (meestal Innodb), moet u de tafel wissen en opnieuw vullen in dezelfde transactie.

Zorg ervoor dat uw lezers READ_COMMITTED of een hoger transactie-isolatieniveau gebruiken (de standaard is REPEATABLE READ, wat hoger is).

Op die manier kunnen lezers tijdens de update de oude inhoud van de tabel blijven lezen.

Er zijn een paar dingen waar u op moet letten:

  • Als de tabel zo groot is dat het terugdraaigebied wordt uitgeput, is dit mogelijk als u de hele (zeg) 1M rijtabel bijwerkt. Dit kan natuurlijk worden aangepast, maar er zijn grenzen
  • Als de transactie halverwege mislukt en wordt teruggedraaid - het terugdraaien van grote transacties is ZEER inefficiënt in InnoDB (het is geoptimaliseerd voor vastleggingen, niet voor terugdraaiingen)
  • Pas op voor deadlocks en time-outs voor vergrendelingswachten, die waarschijnlijker zijn als u grote transacties gebruikt.


  1. Haal het Oracle-tabeltype op uit de opgeslagen procedure met behulp van JDBC

  2. MAAK TABEL ZOALS A1 als A2

  3. mysql_escape_string() functie is verouderd gebruik mysql_real_escape_string() Codeigniter

  4. Hoe de identiteitskolomwaarde in de SQL Server-tabel opnieuw in te stellen - SQL Server / T-SQL-zelfstudiedeel 43