Heim > PHP-Framework > Denken Sie an PHP > Einführung in die Verwendung und Beispiele der Thinkphp-Sperre

Einführung in die Verwendung und Beispiele der Thinkphp-Sperre

藏色散人
Freigeben: 2021-05-13 09:01:46
nach vorne
4605 Leute haben es durchsucht

Die folgende Tutorial-Kolumne stellt Ihnen die Verwendung und Beispiele der Thinkphp-Sperre vor. Ich hoffe, dass sie Freunden, die sie benötigen, hilfreich sein wird!

Einführung in die Verwendung und Beispiele der Thinkphp-Sperre

In Entwicklungsanforderungen werden Sie auf eine solche Situation stoßen, bei der gleichzeitige Anforderungen auftreten. Bevor die Datenbankaktualisierung abgeschlossen ist, handelt es sich bei den von einer anderen Auswahl gefundenen Daten um die Daten vor der Aktualisierung, was zu ungenauen Abfragedaten führt. Wie lässt sich das Problem lösen? Dieses Problem kann mithilfe von innoDB-Transaktionen und -Sperren gelöst werden. Bevor die Aktualisierung unserer aktuellen Zeile abgeschlossen ist, werden die Daten in der Auswahlabfrage für diese Zeile gesperrt.

Zum Beispiel hat unsere Datenbank zwei Datenzeilen wie diese

Wir aktualisieren die Anzahl der Daten mit der ID=1 auf 1000 und schlafen 10 Sekunden lang. Wenn wir zu diesem Zeitpunkt die Daten mit der ID=1 auswählen, werden wir dies tun Warten Sie, bis die Aktualisierung beendet ist. Wenn wir id =2 auswählen, müssen Sie nicht 10 Sekunden warten, die Daten werden sofort abgerufen.

Dies ist die Zeilensperre von InnoDB. Sie sperrt nur die aktuell aktualisierte Datenzeile und nicht die gesamte Tabelle.
Einführung in die Verwendung und Beispiele der Thinkphp-SperreDer Testcode wird unten aufgeführt. Denken Sie daran, die Engine auf innoDB und nicht auf MYISAM zu ändern.

class Index extends Controller
{
    public function index()
    {

        $model=Db::name('test');
        $model->startTrans();
        try{
            $list=$model->lock(true)->find();
            $model->where(['id'=>1])->data(['num'=>900])->update();//id为1的更新
            sleep(10);//等待10秒
            $model->commit();
            print_r($list);
        }catch (\Exception $exception){
            $model->rollback();
            throw $exception;

        }




    }


    public function index2(){

        $model=Db::name('test');
        $model->startTrans();
        try{
            $list=$model->lock(true)->where(['id'=>1])->find();//id为1在更新时,select id=1 会等待。把ID改为2时,不等待
            $model->commit();
            print_r($list);
        }catch (\Exception $exception){
            $model->rollback();
            throw $exception;

        }

    }
}
Nach dem Login kopieren

Testschritte: Nachdem Sie den Index angefordert haben, sehen Sie beim Anfordern von Index2, dass Index2 auf den Abschluss des Ladens des Index wartet, bevor wir das Druckergebnis von Index2 sehen können. Wenn die ID von Index2 auf 2 geändert wird, hat der Index keine Auswirkungen darauf.

Verwandte Empfehlungen:

Die neuesten 10 Thinkphp-Video-Tutorials

Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung und Beispiele der Thinkphp-Sperre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
ThinkPHP Warum Composer verwenden?
Aus 1970-01-01 08:00:00
0
0
0
thinkphp-Dateien hochladen
Aus 1970-01-01 08:00:00
0
0
0
Wie nennt Thinkphp PHP-Erweiterungen?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage