Heim  >  Artikel  >  Datenbank  >  Einführung in optimistisches und pessimistisches Sperren in MySQL (Codebeispiel)

Einführung in optimistisches und pessimistisches Sperren in MySQL (Codebeispiel)

不言
不言nach vorne
2019-02-01 10:13:553689Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in das optimistische Sperren und das pessimistische Sperren in MySQL. Ich hoffe, dass er Ihnen helfen wird.

  • Die Aufgabe der Parallelitätskontrolle im Datenbankverwaltungssystem besteht darin, sicherzustellen, dass der gleichzeitige Zugriff auf dieselben Daten in der Datenbank durch mehrere Transaktionen die Isolation und Einheit der Transaktion und der Transaktion nicht zerstört Einheit der Datenbank

  • Die wichtigsten technischen Mittel, die bei der Parallelitätskontrolle für optimistisches Sperren und pessimistisches Sperren verwendet werden

Pessimistische Sperre

  • In relationalen Datenbankverwaltungssystemen ist die pessimistische Parallelitätskontrolle (pessimistisches Sperren, PCC) eine Methode der Parallelitätskontrolle. Es verhindert, dass eine Transaktion Daten in einer Weise verändert, die sich auf andere Benutzer auswirkt. Wenn auf jede Datenzeile für den von einer Transaktion ausgeführten Vorgang eine Sperre angewendet wird, können andere Transaktionen nur dann Vorgänge ausführen, die mit der Sperre in Konflikt stehen, wenn die Transaktionssperre aufgehoben wird

  • Pessimistische Parallelitätskontrolle wird hauptsächlich in Umgebungen mit intensiven Datenkonflikten und in Umgebungen verwendet, in denen die Kosten für die Verwendung von Sperren zum Schutz von Daten bei Parallelitätskonflikten geringer sind als die Kosten für das Zurücksetzen von Transaktionen

Pessimistisches Sperren bezieht sich auf eine konservative Haltung (Pessimismus) gegenüber Daten, die von der Außenwelt geändert werden (einschließlich anderer aktueller Transaktionen des Systems und der Transaktionsverarbeitung von externen Systemen), sodass die Daten während des gesamten Sommers gesperrt sind Urlaubsabwicklung. Die Implementierung des pessimistischen Sperrens basiert im Allgemeinen auf dem von der Datenbank bereitgestellten Sperrmechanismus (empfohlenes Tutorial: MySQL-Tutorial)

  • In der Datenbank erfolgt der Prozess des pessimistischen Sperrens wie folgt

    • Bevor Sie einen Datensatz ändern, versuchen Sie, dem Datensatz eine exklusive Sperre hinzuzufügen

    • Wenn die Sperre fehlschlägt, bedeutet dies dass der Datensatz geändert wird, muss die aktuelle Abfrage möglicherweise warten oder eine Ausnahme auslösen

    • Wenn die Sperre erfolgreich ist, kann der Datensatz geändert werden und wird danach entsperrt Die Transaktion ist abgeschlossen

    • Wenn es andere Vorgänge gibt, um den Datensatz zu ändern oder eine exklusive Sperre hinzuzufügen, warten sie darauf, dass wir sie entsperren oder direkt eine Ausnahme auslösen

Pessimistisches Sperren wird in MySQL InnoDB verwendet

Um pessimistisches Sperren zu verwenden, muss das Auto-Commit-Attribut der MySQL-Datenbank deaktiviert werden, da MySQL standardmäßig den Autocommit-Modus verwendet , das heißt, wenn Sie einen Aktualisierungsvorgang ausführen, schreibt MySQL das Ergebnis sofort fest

//开始事务
begin;/begin work;/start transaction;(三者选一个)
select status from t_goods where id=1 for update;
//根据商品信息生成订单
insert into t_orders (id,goods_id) values (null,1);
//修改商品status为2
update t_goods set status=2;
// 提交事务
commit;/commit work;

In der obigen Abfrageanweisung wird die Methode „select...for update“ verwendet, um pessimistisches Sperren durch Aktivieren von Exclusive zu implementieren Verriegelung. Der entsprechende Datensatz ist gesperrt und andere Transaktionen müssen auf die Übermittlung dieser Transaktion warten, bevor sie ausgeführt werden können

Wir verwenden select... für update, um die Daten zu sperren, aber wir müssen aufpassen Für einige Sperrebenen verwendet MySQL InnoDB standardmäßig Sperren auf Zeilenebene. Sperren auf Zeilenebene basieren auf Indizes. Wenn eine SQL-Anweisung den Index nicht verwendet, werden Sperren auf Tabellenebene nicht zum Sperren der gesamten Tabelle verwendet.

Funktionen
  • Gewährleistet die Sicherheit der Datenverarbeitung

  • In Bezug auf die Effizienz, aufgrund der Verarbeitung von Sperren Der Mechanismus verursacht zusätzlichen Overhead für die Datenbank und erhöht die Wahrscheinlichkeit eines Deadlocks

  • Da es bei schreibgeschützten Transaktionen keine Konflikte gibt, besteht keine Notwendigkeit, Sperren zu verwenden. Dadurch wird die Systemlast erhöht und die Parallelität verringert

Optimistisches Sperren

  • Optimistische Parallelitätskontrolle ist auch eine Methode der Parallelitätskontrolle.

  • Angenommen, dass sich gleichzeitige Transaktionen mehrerer Benutzer während der Verarbeitung nicht gegenseitig beeinflussen, kann jede Transaktion den Teil der Daten verarbeiten, den sie betrifft, ohne eine Sperre zu generieren, bevor die Datenaktualisierung übermittelt wird Die Transaktion prüft zunächst, ob andere Transaktionen die Daten geändert haben, nachdem die Transaktion die Daten gelesen hat. Wenn ja, wird die sendende Transaktion zurückgesetzt Es wird davon ausgegangen, dass die Daten nicht in Konflikt geraten. Wenn die Daten also zur Aktualisierung übermittelt werden, wird der Datenkonflikt offiziell erkannt. Wenn ein Konflikt festgestellt wird, wird eine Fehlermeldung an den Benutzer zurückgegeben, damit dieser entscheiden kann, was zu tun ist Um die

optimistische Sperre zu implementieren, wird im Allgemeinen die Versionsnummer des Datensatzes verwendet, den Daten eine Versionsidentifikation hinzugefügt und die Versionsidentifikation aktualisiert, wenn die Daten aktualisiert werden

  • Implementierung

    Bei Verwendung der Versionsnummer können Sie beim Initialisieren der Daten eine Versionsnummer angeben, und jeder Aktualisierungsvorgang für die Daten führt einen +1-Vorgang für die Versionsnummer aus. Und bestimmen Sie, ob die aktuelle Versionsnummer die neueste Versionsnummer der Daten ist
  • 1.查询出商品信息
    select (status,status,version) from t_goods where id=#{id}
    2.根据商品信息生成订单
    3.修改商品status为2
    update t_goods 
    set status=2,version=version+1
    where id=#{id} and version=#{version};
Funktionen
Die optimistische Parallelitätskontrolle geht davon aus, dass die Wahrscheinlichkeit eines Datenwettbewerbs zwischen Transaktionen gering ist, also tun Sie dies so direkt wie möglich. Die Sperre wird bis zur Übermittlung nicht gesperrt, sodass keine Sperren oder Deadlocks auftreten

Das obige ist der detaillierte Inhalt vonEinführung in optimistisches und pessimistisches Sperren in MySQL (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen