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

Hvordan låser man bevidst en MySQL-række, så selv SELECT vil returnere en fejl?

Hvis du indstiller transaktionsisolationsniveauet til SERIALIZABLE , InnoDB vil implicit tilføje LOCK IN SHARE MODE til alle SELECT udsagn.

Denne tilstand er i konflikt med låsene placeret af SELECT FOR UPDATE og SELECT s vil låse.

Bemærk dog, at InnoDB kan låse flere rækker end opfylder WHERE tilstand. Dette er fordi det låser alle scannede rækker , ikke kun de matchede .

Lad os sige, du har et indeks på col1 og denne forespørgsel:

SELECT  *
FROM    mytable
WHERE   col1 = 1
        AND col2 = 2
FOR UPDATE

bruger dette indeks.

Dette låser alle poster med col1 = 1 , selv dem med col2 <> 2



  1. Transponer rækker til overskrifter i MYSQL

  2. Indsættelse af SQL Server-data i Salesforce med en markør

  3. mysql - Optimering af ORDER BY COALESCE på sammenføjet tabelkolonne

  4. OR understøttes ikke med CASE Statement i SQL Server