sql >> Database >  >> RDS >> Mysql

MySQL 'selecteer voor update'-gedrag

Laat me je zaken doornemen en uitleggen hoe deze sloten werken:

1 zaak

T1 wil enkele rijen in uw testtabel bijwerken. Deze transactie zet IX lock op alle tafels en X lock op de eerste 5 rijen.

T2 wil enkele rijen in uw testtabel bijwerken. Deze transactie zet IX (omdat IX compatibel is met IX) op alle tafels en probeert de eerste 5 rijen te krijgen, maar het lukt niet omdat X niet compatibel is met X

Dus het gaat goed met ons.

2.1 geval

T1 wil enkele rijen in uw testtabel bijwerken. Deze transactie plaatste IX lock op alle tafels en X lock op de eerste 5 rijen.

T2 wil enkele rijen uit uw testtabel selecteren. En het plaatst geen sloten (omdat InnoDB niet-vergrendelende uitlezingen biedt)

2.1 geval

T1 wil enkele rijen in uw testtabel bijwerken. Deze transactie plaatste IX lock op alle tafels en X lock op de eerste 5 rijen.

T2 wil enkele rijen uit uw testtabel bijwerken (selecteren voor update). Plaats IS op de hele tafel en probeer S lock op de rij te krijgen en faalt omdat X en S niet compatibel zijn.

Houd ook altijd rekening met het isolatieniveau:verschillende niveaus veroorzaken een ander mechanisme om sloten te bevrijden/verkrijgen

Ik hoop dat het helpt




  1. SQL Server AlwaysOn (Beschikbaarheidsgroep) Architectuur en stapsgewijze installatie -1

  2. Backtrace van SQL-query naar applicatiecode?

  3. Joins gebruiken om gegevens uit verschillende tabellen te combineren in PostgreSQL

  4. JDBC Create Table Voorbeeld Gebruiksverklaring