Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk melaksanakan operasi penguncian bebas kunci dan optimistik pada data dalam MySQL?

Bagaimana untuk melaksanakan operasi penguncian bebas kunci dan optimistik pada data dalam MySQL?

WBOY
WBOYasal
2023-08-03 11:27:161456semak imbas

Bagaimana untuk melaksanakan data bebas kunci dan operasi penguncian optimistik dalam MySQL?

Ikhtisar:
Dalam aplikasi pangkalan data konkurensi tinggi, kunci adalah kesesakan prestasi biasa. MySQL menyediakan pelbagai mekanisme kunci untuk memastikan ketekalan data dan kawalan konkurensi, tetapi terlalu banyak operasi kunci akan membawa kepada kemerosotan prestasi. Untuk menyelesaikan masalah ini, MySQL memperkenalkan mekanisme penguncian bebas kunci dan optimistik untuk meningkatkan prestasi konkurensi pangkalan data. Artikel ini akan memperkenalkan cara menggunakan penguncian bebas kunci dan optimistik untuk mengendalikan data dalam MySQL.

1. Contoh operasi tanpa kunci:
Pengoperasian tanpa kunci merujuk kepada mencapai akses serentak ke pangkalan data tanpa menggunakan sebarang mekanisme kunci dalam keadaan tertentu. Dalam MySQL, operasi tanpa kunci boleh dicapai dengan menggunakan kunci utama auto-increment dan mekanisme penguncian optimistik.

Kod sampel adalah seperti berikut:

-- 创建用户表
CREATE TABLE user (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  balance INT NOT NULL
);

-- 插入数据
INSERT INTO user (name, balance)
VALUES ('Alice', 100), ('Bob', 200), ('Charlie', 300);

-- 查询数据
SELECT * FROM user;

-- 无锁化操作示例:Alice向Bob转账100元
BEGIN;
DECLARE @alice_balance INT;
DECLARE @bob_balance INT;
SELECT balance INTO @alice_balance FROM user WHERE name = 'Alice';
SELECT balance INTO @bob_balance FROM user WHERE name = 'Bob';
IF @alice_balance >= 100 THEN
  UPDATE user SET balance = @alice_balance - 100 WHERE name = 'Alice';
  UPDATE user SET balance = @bob_balance + 100 WHERE name = 'Bob';
END IF;
COMMIT;

-- 查询数据
SELECT * FROM user;

Kod sampel di atas menunjukkan idea menggunakan operasi bebas kunci untuk melaksanakan pemindahan serentak dalam MySQL. Dalam operasi tanpa kunci, kami tidak menggunakan sebarang mekanisme kunci pangkalan data, tetapi menggunakan mekanisme penguncian optimistik untuk mencapai ketekalan data dan kawalan konkurensi. . Penguncian optimis boleh dilaksanakan dalam MySQL dengan menggunakan nombor versi atau medan cap masa.

Kod sampel adalah seperti berikut:

-- 创建用户表
CREATE TABLE user (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  balance INT NOT NULL,
  version INT NOT NULL
);

-- 插入数据
INSERT INTO user (name, balance, version)
VALUES ('Alice', 100, 0), ('Bob', 200, 0), ('Charlie', 300, 0);

-- 查询数据
SELECT * FROM user;

-- 乐观锁操作示例:Alice向Bob转账100元
BEGIN;
DECLARE @alice_id INT;
DECLARE @bob_id INT;
DECLARE @alice_balance INT;
DECLARE @bob_balance INT;
SELECT id INTO @alice_id, balance INTO @alice_balance FROM user WHERE name = 'Alice';
SELECT id INTO @bob_id, balance INTO @bob_balance FROM user WHERE name = 'Bob';
IF @alice_balance >= 100 THEN
  UPDATE user SET balance = @alice_balance - 100, version = version + 1 WHERE id = @alice_id AND version = @alice_version;
  UPDATE user SET balance = @bob_balance + 100, version = version + 1 WHERE id = @bob_id AND version = @bob_version;
END IF;
COMMIT;

-- 查询数据
SELECT * FROM user;

Kod sampel di atas menunjukkan idea menggunakan operasi penguncian optimistik untuk melaksanakan pemindahan serentak dalam MySQL. Dalam operasi kunci optimistik, kami menggunakan nombor versi untuk mengawal ketekalan data Jika nombor versi semasa tidak konsisten dengan nombor versi semasa membaca, ini bermakna data telah diubah suai oleh transaksi lain dan operasi akan dilancarkan. belakang.

Ringkasan:

Operasi tanpa kunci dan penguncian optimistik adalah cara penting untuk meningkatkan prestasi serentak dalam MySQL. Dengan menggunakan operasi tanpa kunci dan penguncian optimistik, prestasi overhed yang disebabkan oleh kunci boleh dikurangkan dan prestasi serentak pangkalan data boleh dipertingkatkan. Operasi tanpa kunci mencapai akses serentak dengan menggunakan kunci utama yang meningkat secara automatik dan mekanisme penguncian optimistik melaksanakan kawalan serentak data melalui nombor versi atau medan cap masa. Dalam aplikasi praktikal, adalah perlu untuk memilih strategi kawalan serentak yang sesuai mengikut senario tertentu untuk mencapai data tanpa kunci dan operasi kunci yang optimistik.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan operasi penguncian bebas kunci dan optimistik pada data dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn