Inhaltsverzeichnis
MySQL-Sperre:
Sperrmechanismus:
Klassifizierung von Sperren:
Fenster 2:
Heim Datenbank MySQL-Tutorial Was ist das Konzept des MySQL-Sperrmechanismus?

Was ist das Konzept des MySQL-Sperrmechanismus?

Jun 03, 2023 pm 06:01 PM
mysql

Was ist das Konzept des MySQL-Sperrmechanismus?

MySQL-Sperre:

Um die Genauigkeit der Daten in einer Multithread-Umgebung sicherzustellen, ist es normalerweise erforderlich, einen Synchronisierungsmechanismus zu verwenden. Die Synchronisierung entspricht dem Sperren. Der Zweck der Sperre besteht darin, dass andere Threads warten müssen, wenn ein Thread Daten verarbeitet, was die folgenden Vorteile bringen kann. Wenn die Ausführung eines Threads abgeschlossen ist, wird die Sperre aufgehoben. Nur andere Threads können Operationen ausführen!

Dann ist die Funktion von Sperren in unserer MySQL-Datenbank ähnlich. Bei der Isolierung der Transaktionsverarbeitung können Probleme wie schmutzige Lesevorgänge, nicht wiederholbare Lesevorgänge und Phantom-Lesevorgänge auftreten.

In einer Datenbank sind Daten eine Ressource, die von vielen Benutzern gemeinsam genutzt wird. Wie die Konsistenz und Effektivität des gleichzeitigen Zugriffs auf Daten sichergestellt werden kann, ist ein Problem, das alle Datenbanken lösen müssen. Aufgrund der Eigenschaften seiner eigenen Architektur verfügt MySQL Alle sind mit Verriegelungsmechanismen für bestimmte Szenarien ausgestattet, sodass die Unterschiede bei den Motoren zu sehr unterschiedlichen Verriegelungsmechanismen führen.

Sperrmechanismus:

Um die Konsistenz der Daten sicherzustellen, verwendet die Datenbank eine Regel, die unter Verwendung verschiedener gemeinsam genutzter Ressourcen entwickelt wurde, um bei gleichzeitigem Zugriff Ordnung zu schaffen.

Zum Beispiel: Beim Kauf eines Produkts auf einer E-Commerce-Website gibt es nur ein Produkt in der Produktliste, und zu diesem Zeitpunkt kaufen es zwei Personen gleichzeitig. Daher ist es von entscheidender Bedeutung, wer es kaufen kann .

Transaktionen werden hier verwendet, um eine Reihe von Vorgängen auszuführen:

Zuerst die Artikeldaten aus der Produkttabelle abrufen

Dann die Bestellung eingeben

Nach der Zahlung die Zahlungstabelleninformationen eingeben

Aktualisieren Sie die Menge der Artikel in Die Produkttabelle

Im obigen Prozess können Sperren verwendet werden, um Produktmengendateninformationen zu schützen und eine Isolierung zu erreichen, d. h. nur der erste Benutzer darf den gesamten Kaufvorgang abschließen, während andere Benutzer nur warten können, wodurch das Problem gelöst wird Konfliktproblem in der Parallelität.

Klassifizierung von Sperren:

Klassifizierung nach Vorgang:

Gemeinsame Sperre: auch Lesesperre genannt. Mehrere Transaktionen können dieselben Daten gleichzeitig lesen und gleichzeitig sperren, um eine gegenseitige Beeinflussung zu vermeiden, sie können jedoch die Datensätze nicht ändern.

Exklusive Sperre: auch Schreibsperre genannt. Bevor der aktuelle Vorgang abgeschlossen ist, werden Lese- und Schreibvorgänge für andere Vorgänge blockiert. Klassifizierung nach Granularität: Sperre auf Tabellenebene: Während des Vorgangs wird die gesamte Tabelle gesperrt. Der Overhead ist gering und die Sperrung erfolgt schnell. Die Sperrkraft ist hoch, die Wahrscheinlichkeit eines Sperrenkonflikts ist hoch und die Parallelität ist am geringsten. Bevorzugen Sie die MyISAM-Speicher-Engine!

Sperre auf Zeilenebene: Während des Betriebs wird die aktuelle Betriebszeile gesperrt. Bei hoher Parallelität ist die Sperrgranularität gering, was sich positiv auf die Verringerung der Wahrscheinlichkeit von Sperrkonflikten auswirkt. Es muss jedoch auf die Geschwindigkeit des Sperrvorgangs geachtet werden, um übermäßigen Overhead zu vermeiden, und das Auftreten eines Deadlocks muss vermieden werden. Bevorzugen Sie die InnoDB-Speicher-Engine! Sperre auf Seitenebene: Die Granularität der Sperre, die Konfliktwahrscheinlichkeit und die Sperrkosten liegen zwischen Tabellensperren und Zeilensperren, und die Parallelitätsleistung ist durchschnittlich.

Klassifizierung nach Verwendung:

Pessimistische Sperre: Jedes Mal, wenn Sie die Daten abfragen, denken Sie, dass andere sie ändern werden. Das ist sehr pessimistisch, also sperren Sie sie beim Abfragen.

Optimistische Sperre: Jedes Mal, wenn Sie die Daten abfragen, denken Sie, dass andere sie nicht ändern werden. Sie sind sehr optimistisch, aber beim Aktualisieren werden Sie beurteilen, ob andere die Daten in diesem Zeitraum aktualisiert haben Motoren

Freigabesperre:

Wenn ein Schlüssel vorhanden ist, wird InnoDB standardmäßig auf eine Tabellensperre aktualisiert. Mehrere Fenster können die Daten verschiedener Zeilen ändern. Wenn Sie auf die Übermittlung des ersten gesperrten Commits warten, können Sie verschiedene Zeilen direkt ändern, wenn Sie jedoch die andere abfragen möchten müssen auf die später geänderten Commits warten. Die Sperre verschwindet nach der Übermittlung

Gemeinsame Sperre:

SELECT语句 LOCK IN SHARE MODE;
Nach dem Login kopieren
Was ist das Konzept des MySQL-Sperrmechanismus?Fenster 1:

- 窗口1
/*
    共享锁:数据可以被多个事务查询,但是不能修改
*/
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录。加入共享锁
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 查询分数为99分的数据记录。加入共享锁
SELECT * FROM student WHERE score=99 LOCK IN SHARE MODE;
-- 提交事务
COMMIT;
Nach dem Login kopieren

Fenster 2:

-- 窗口2
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录(普通查询,可以查询)
SELECT * FROM student WHERE id=1;
-- 查询id为1的数据记录,并加入共享锁(可以查询。共享锁和共享锁兼容)
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 修改id为1的姓名为张三三(不能修改,会出现锁的情况。只有窗口1提交事务后,才能修改成功)
UPDATE student SET NAME='张三三' WHERE id = 1;
-- 修改id为2的姓名为李四四(修改成功,InnoDB引擎默认是行锁)
UPDATE student SET NAME='李四四' WHERE id = 2;
-- 修改id为3的姓名为王五五(修改失败,InnoDB引擎如果不采用带索引的列加锁。则会提升为表锁)
UPDATE student SET NAME='王五五' WHERE id = 3;
-- 提交事务
COMMIT;
Nach dem Login kopieren

Exklusive Sperre:

Wenn die exklusive Sperre ausgeführt wird, können normale Abfragen anderer Transaktionen durchgeführt werden, jedoch keine Sperrvorgänge sind erlaubt.

-- 标准语法
SELECT语句 FOR UPDATE;
Nach dem Login kopieren

Fenster 1:

-- 窗口1
/*
    排他锁:加锁的数据,不能被其他事务加锁查询或修改
*/
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录,并加入排他锁
SELECT * FROM student WHERE id=1 FOR UPDATE;
-- 提交事务
COMMIT;
Nach dem Login kopieren

MyISAM-Sperre:

MyISAM-Lesesperre:

myisam ist eine Sperre für die gesamte Tabelle, wenn sie nicht entsperrt ist Transaktionen können überprüft werden, jedoch nicht. Alle anderen Vorgänge, einschließlich der eigenen Transaktion, können nicht ausgeführt werden kann betrieben werden.

Die Daten müssen während der gesamten Datenverarbeitung gesperrt werden. Pessimistisches Sperren basiert im Allgemeinen auf dem Sperrmechanismus, der von relationalen Datenbanken bereitgestellt wird.

Zeilensperren und Tabellensperren sind beide pessimistische Sperren, unabhängig davon, ob es sich um Lese- oder Schreibsperren handelt.

Optimistische Sperre:

ist sehr optimistisch. Jedes Mal, wenn Sie die Daten bearbeiten, denken Sie, dass niemand sie ändern wird, also sperren Sie sie nicht.

Aber bei der Aktualisierung wird beurteilt, ob die Daten in diesem Zeitraum geändert wurden.

Benutzer müssen es selbst implementieren. Bei der Übermittlung von Vorgängen wird keine gleichzeitige Ressourcenverhinderung durchgeführt.

Einfache Implementierung des optimistischen Sperrens: Implementierungsidee: Marker zum Vergleich hinzufügen. Wenn sie gleich sind, werden sie ausgeführt, wenn sie unterschiedlich sind, werden sie nicht ausgeführt

方式一:版本号

给数据表中添加一个version列,每次更新后都将这个列的值加1。

读取数据时,将版本号读取出来,在执行更新的时候,比较版本号。

如果相同则执行更新,如果不相同,说明此条数据已经发生了变化。

用户自行根据这个通知来决定怎么处理,比如重新开始一遍,或者放弃本次更新。

-- 创建city表
CREATE TABLE city(
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 城市id
    NAME VARCHAR(20),                   -- 城市名称
    VERSION INT                         -- 版本号
);
-- 添加数据
INSERT INTO city VALUES (NULL,'北京',1),(NULL,'上海',1),(NULL,'广州',1),(NULL,'深圳',1);
-- 修改北京为北京市
-- 1.查询北京的version
SELECT VERSION FROM city WHERE NAME='北京';
-- 2.修改北京为北京市,版本号+1。并对比版本号
UPDATE city SET NAME='北京市',VERSION=VERSION+1 WHERE NAME='北京' AND VERSION=1;
Nach dem Login kopieren

方式二:时间戳

和版本号方式基本一样,给数据表中添加一个列,名称无所谓,数据类型需要是timestamp

每次更新后都将最新时间插入到此列。

读取数据时,将时间读取出来,在执行更新的时候,比较时间。

如果相同则执行更新,如果不相同,说明此条数据已经发生了变化。

悲观锁和乐观锁使用前提:

当读取操作远多于写操作时,更新操作被加锁会阻塞所有读取操作,降低了系统的吞吐量。最后还要释放锁,锁是需要一些开销的,这时候可以选择乐观锁。

如果是读写比例差距不是非常大或者系统没有响应不及时,吞吐量瓶颈的问题,那就不要去使用乐观锁,它增加了复杂度,也带来了业务额外的风险。这时候可以选择悲观锁。

Das obige ist der detaillierte Inhalt vonWas ist das Konzept des MySQL-Sperrmechanismus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man phpmyadmin öffnet Wie man phpmyadmin öffnet Apr 10, 2025 pm 10:51 PM

Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

MySQL: Eine Einführung in die beliebteste Datenbank der Welt MySQL: Eine Einführung in die beliebteste Datenbank der Welt Apr 12, 2025 am 12:18 AM

MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

So verwenden Sie ein einzelnes Gewinde -Redis So verwenden Sie ein einzelnes Gewinde -Redis Apr 10, 2025 pm 07:12 PM

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Mysqls Platz: Datenbanken und Programmierung Mysqls Platz: Datenbanken und Programmierung Apr 13, 2025 am 12:18 AM

Die Position von MySQL in Datenbanken und Programmierung ist sehr wichtig. Es handelt sich um ein Open -Source -Verwaltungssystem für relationale Datenbankverwaltung, das in verschiedenen Anwendungsszenarien häufig verwendet wird. 1) MySQL bietet effiziente Datenspeicher-, Organisations- und Abruffunktionen und unterstützt Systeme für Web-, Mobil- und Unternehmensebene. 2) Es verwendet eine Client-Server-Architektur, unterstützt mehrere Speichermotoren und Indexoptimierung. 3) Zu den grundlegenden Verwendungen gehören das Erstellen von Tabellen und das Einfügen von Daten, und erweiterte Verwendungen beinhalten Multi-Table-Verknüpfungen und komplexe Abfragen. 4) Häufig gestellte Fragen wie SQL -Syntaxfehler und Leistungsprobleme können durch den Befehl erklären und langsam abfragen. 5) Die Leistungsoptimierungsmethoden umfassen die rationale Verwendung von Indizes, eine optimierte Abfrage und die Verwendung von Caches. Zu den Best Practices gehört die Verwendung von Transaktionen und vorbereiteten Staten

Warum MySQL verwenden? Vorteile und Vorteile Warum MySQL verwenden? Vorteile und Vorteile Apr 12, 2025 am 12:17 AM

MySQL wird für seine Leistung, Zuverlässigkeit, Benutzerfreundlichkeit und Unterstützung der Gemeinschaft ausgewählt. 1.MYSQL bietet effiziente Datenspeicher- und Abruffunktionen, die mehrere Datentypen und erweiterte Abfragevorgänge unterstützen. 2. Übernehmen Sie die Architektur der Client-Server und mehrere Speichermotoren, um die Transaktion und die Abfrageoptimierung zu unterstützen. 3. Einfach zu bedienend unterstützt eine Vielzahl von Betriebssystemen und Programmiersprachen. V.

So stellen Sie eine Verbindung zur Datenbank von Apache her So stellen Sie eine Verbindung zur Datenbank von Apache her Apr 13, 2025 pm 01:03 PM

Apache verbindet eine Verbindung zu einer Datenbank erfordert die folgenden Schritte: Installieren Sie den Datenbanktreiber. Konfigurieren Sie die Datei web.xml, um einen Verbindungspool zu erstellen. Erstellen Sie eine JDBC -Datenquelle und geben Sie die Verbindungseinstellungen an. Verwenden Sie die JDBC -API, um über den Java -Code auf die Datenbank zuzugreifen, einschließlich Verbindungen, Erstellen von Anweisungen, Bindungsparametern, Ausführung von Abfragen oder Aktualisierungen und Verarbeitungsergebnissen.

So starten Sie MySQL von Docker So starten Sie MySQL von Docker Apr 15, 2025 pm 12:09 PM

Der Prozess des Startens von MySQL in Docker besteht aus den folgenden Schritten: Ziehen Sie das MySQL -Image zum Erstellen und Starten des Containers an, setzen

CentOS installieren MySQL CentOS installieren MySQL Apr 14, 2025 pm 08:09 PM

Die Installation von MySQL auf CentOS umfasst die folgenden Schritte: Hinzufügen der entsprechenden MySQL Yum -Quelle. Führen Sie den Befehl mySQL-server aus, um den MySQL-Server zu installieren. Verwenden Sie den Befehl mySQL_SECURE_INSTALLATION, um Sicherheitseinstellungen vorzunehmen, z. B. das Festlegen des Stammbenutzerkennworts. Passen Sie die MySQL -Konfigurationsdatei nach Bedarf an. Tune MySQL -Parameter und optimieren Sie Datenbanken für die Leistung.

See all articles