sql >> Database >  >> RDS >> Mysql

MySQL-vergrendeling in dubbele sleutelfout

Ik denk dat je de terminologie/het proces vereenvoudigt. Nadat de query is geparseerd en voordat deze wordt uitgevoerd, moet deze de nodige vergrendelingen verkrijgen. Op dit punt wordt vastgesteld dat:

  • sessie 1 krijgt de exclusieve vergrendeling, omdat deze wordt ingevoegd en er geen andere vergrendelingen zijn
  • sessie 2 en 3 komen in de wachtrij te staan ​​voor de gedeelde vergrendeling omdat de exclusieve vergrendeling al is vastgehouden door sessie 1, en sessie 2 en 3 hebben een dubbele sleutelfout

Zoals hierboven beschreven, worden sessies 2 en 3 in de wachtrij geplaatst voor gedeelde sloten omdat ze een dubbele sleutelfout hebben. Wanneer sessie 1 echter de sleutel verwijdert en de exclusieve vergrendeling vrijgeeft, krijgen nu zowel sessie 2 als 3 gedeelde vergrendelingen. Op dit punt proberen beide een exclusief slot te bemachtigen om de insert te voltooien. Geen van beide kan echter, omdat de ander het gedeelde slot al vasthoudt. Dus aan geen van beide wordt exclusief slot verleend en ze lopen vast.



  1. SQLSTATE [HY000] [1045] uitzondering tijdens verbinding met database via 000webhost

  2. Bereken een lopend totaal in MySQL

  3. Het aantal MySQL-kolommen komt niet overeen met het aantal waarden, maar het aantal komt WEL overeen

  4. Maximaal krijgen zonder groeperen