Heim  >  Artikel  >  Datenbank  >  So wenden Sie pessimistisches Sperren und optimistisches Sperren in MySQL an

So wenden Sie pessimistisches Sperren und optimistisches Sperren in MySQL an

PHPz
PHPznach vorne
2023-06-02 21:27:591250Durchsuche

1. Schlösser

Im Leben gibt es überall Schlösser, wenn ich zum Spielen rausgehe, und ich muss sie abschließen, um die Sicherheit zu gewährleisten meines Eigentums.

Im Code: Wenn beispielsweise mehrere Threads gemeinsam genutzte Variablen gleichzeitig bedienen und ändern müssen, müssen Sie die Variable sperren (synchronisieren), um sicherzustellen, dass der Variablenwert korrekt ist.

Datenbanktabelle: Wenn mehrere Benutzer dieselben Daten in der Tabelle ändern, können wir die Zeilendaten sperren (Zeilensperre).

SQL-Skript

CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `deleted` tinyint(1) DEFAULT NULL COMMENT '是否删除',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人',
  `update_id` bigint(20) DEFAULT NULL COMMENT '操作人',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `status` varchar(255) DEFAULT NULL COMMENT '状态',
  `dog` text DEFAULT NULL COMMENT '狗',
  `version` int(11) DEFAULT NULL COMMENT '版本号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `sys_user`(`id`, `name`, `age`, `email`, `deleted`, `create_time`, `create_id`, `update_id`, `update_time`, `status`, `dog`, `version`) VALUES (1, 'gukong', 19, 'test1@baomidou.com', 0, NULL, NULL, NULL, NULL, NULL, NULL, 0);

2. Pessimistische Sperre

Wenn wir ein Datenelement in der Datenbank ändern möchten, ist es am besten, die Daten direkt zu sperren, um zu verhindern, dass sie gleichzeitig von anderen geändert werden Parallelitätsvorkommen.

Die pessimistische Sperre wird als pessimistische Sperre bezeichnet, da sie eine pessimistische Parallelitätskontrollmethode verwendet und davon ausgeht, dass die Daten von anderen Threads geändert werden. Daher wird bei der Änderung der Daten ein Sperrvorgang ausgeführt. Wir glauben im Allgemeinen, dass die Wahrscheinlichkeit, dass Daten gleichzeitig geändert werden, relativ hoch ist, sodass sie vor der Änderung gesperrt werden müssen.

Zeilensperren, Tabellensperren, Lesesperren, Schreibsperren und von syncronized implementierte Sperren sind allesamt pessimistische Sperren.

MySQL aktiviert die pessimistische Sperre, Beispiel-SQL-Anweisung

So wenden Sie pessimistisches Sperren und optimistisches Sperren in MySQL an

3. Optimistische Sperre behält eine optimistische Haltung gegenüber Datenkonflikten bei. Beim Senden werden die verarbeiteten Daten nicht gesperrt , wird ein Mechanismus verwendet, um zu überprüfen, ob Konflikte in den Daten vorliegen.

Optimistisches Sperren wird normalerweise durch Hinzufügen einer Version (Version) oder eines Zeitstempels (Zeitstempel) zur Tabelle implementiert, wobei die Version am häufigsten verwendet wird.

Die optimistische Sperre gibt bei jedem Datenänderungsvorgang eine Versionsnummer an. Sobald die Versionsnummer mit der Datenversionsnummer übereinstimmt, kann der Änderungsvorgang ausgeführt werden und die Versionsnummer beträgt +1 scheitern.

Beispiel für eine optimistische Sperre:

--开启事务
BEGIN
--对行加锁
SELECT * FROM `sys_user` where id = 1 for UPDATE
--修改加锁行的数据
update sys_user set name = 'gukong',age = 18 where id = 1;
--提交事务
commit;

4. So wählen Sie aus: Die optimistische Sperre eignet sich für Szenarien, in denen es viele Lesevorgänge und wenige Schreibvorgänge gibt. Sie kann den Aufwand für häufiges Sperren und Freigeben von Sperren einsparen und den Durchsatz verbessern Wenn bei Schreibvorgängen häufige Vorgänge erforderlich sind, kann die Verwendung optimistischer Sperren viele Spins generieren, CPU verbrauchen und die Leistung beeinträchtigen, da die Versionen inkonsistent sind und Aktualisierungen ständig wiederholt werden. In diesem Fall eignet sich pessimistisches SperrenSo wenden Sie pessimistisches Sperren und optimistisches Sperren in MySQL an

Das obige ist der detaillierte Inhalt vonSo wenden Sie pessimistisches Sperren und optimistisches Sperren in MySQL an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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