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

låser dette databasen?

For mig er dokumentationen lidt uklar:

Interne låsemetoder foreslår, at det i nogle tilfælde er muligt at indsætte i en MyISAM-tabel, mens en anden session læser fra den:

Men Tabellåsningsproblemer viser en situation, hvor bordet vil være låst, indtil SELECT er fuldført (dette passer med din situation):

InnoDB-tabel implementerer rækkeniveaulåse, så kun den række, der læses, vil blive låst, i stedet for hele tabellen.

I stedet for kun at stole på dokumentationen prøvede jeg en lille test:

  1. Opret to tabeller med samme struktur:table_a og table_b .
  2. Udfyld table_a med 500.000 rækker.
  3. Kopiér data fra table_a til table_b ved hjælp af en INSERT INTO ... SELECT erklæring.
  4. Under kopieringsprocessen skal du bruge en anden session til at indsætte en ny række i table_a .
  5. Tjek om table_b indeholder den nye rekord.

Når begge tabeller var MyISAM, table_b indeholdt ikke den nye post efter kopien. Når begge tabeller var InnoDB, table_b indeholdt den nye post efter kopien. Jeg har gentaget dette tre gange, og som forventet blev resultatet det samme hver gang.

Så kort sagt, hvis dit bord er MyISAM, vil det være låst. Hvis det er InnoDB, vil det ikke. Selvfølgelig tager denne test ikke højde for opdateringer, men jeg forventer, at resultaterne vil være ens.




  1. Hvordan MAKE_SET() virker i MariaDB

  2. SQLite - Vælg Data

  3. Korrumperer Django tidszonebevidst DateTimeField, når det gemmer det i databasen?

  4. Hvordan kører jeg kun Google Cloud SQL, når jeg har brug for det?