Rumah >pangkalan data >tutorial mysql >Bagaimana untuk menggunakan penguncian pesimis dan penguncian optimistik dalam Mysql

Bagaimana untuk menggunakan penguncian pesimis dan penguncian optimistik dalam Mysql

PHPz
PHPzke hadapan
2023-06-02 21:27:591355semak imbas

1. Kunci

Dalam kehidupan: Kunci ada di mana-mana sahaja di sekeliling kita, contohnya, saya perlu mengunci pintu apabila saya keluar untuk bermain ia mesti dikunci untuk memastikan Keselamatan harta saya.

Dalam kod: Contohnya, jika berbilang benang perlu beroperasi dan mengubah suai pembolehubah dikongsi pada masa yang sama, anda perlu mengunci pembolehubah (disegerakkan) untuk memastikan nilai pembolehubah adalah betul.

Jadual pangkalan data: Apabila berbilang pengguna mengubah suai data yang sama dalam jadual, kami boleh mengunci baris data (kunci baris).

skrip sql

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. Kunci pesimis

Apabila kita ingin mengubah suai sekeping data dalam pangkalan data, untuk mengelakkan daripada diubah suai oleh orang lain pada masa yang sama , ia adalah yang terbaik untuk Penyelesaian adalah untuk terus mengunci data untuk mengelakkan konkurensi.

Sebab kunci pesimis dipanggil kunci pesimis adalah kerana ia menggunakan kaedah kawalan konkurensi pesimis, dengan mengandaikan bahawa data akan diubah suai oleh utas lain, jadi operasi mengunci akan dilakukan apabila data diubah suai. Kami secara amnya percaya bahawa kebarangkalian data diubah suai secara serentak adalah agak tinggi, jadi ia perlu dikunci sebelum pengubahsuaian.

Kunci baris, kunci meja, kunci baca, kunci tulis dan kunci yang dilaksanakan dengan disegerakkan dalam pangkalan data semuanya adalah kunci pesimis.

mysql menghidupkan penguncian pesimis, contoh pernyataan sql

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

Bagaimana untuk menggunakan penguncian pesimis dan penguncian optimistik dalam Mysql

3. Sikap, semasa mengendalikan data, data yang dikendalikan tidak akan dikunci Hanya apabila data diserahkan, mekanisme akan digunakan untuk mengesahkan sama ada terdapat konflik dalam data.

Penguncian optimis biasanya dilaksanakan dengan menambahkan versi (versi) atau cap waktu (cap masa) pada jadual, antara versi yang paling biasa digunakan.

Setiap kali kunci optimistik melakukan operasi pengubahsuaian data, ia akan membawa nombor versi Setelah nombor versi konsisten dengan nombor versi data, operasi pengubahsuaian boleh dilakukan dan nombor versi akan menjadi +1 . Jika tidak, ia akan Perlaksanaan gagal.

Contoh kunci optimistik:

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

Bagaimana untuk menggunakan penguncian pesimis dan penguncian optimistik dalam Mysql4. Cara memilih

Kunci optimis sesuai untuk senario dengan lebih banyak membaca dan kurang menulis, dan boleh diabaikan Overhed mengunci dan melepaskan kunci yang kerap meningkatkan daya pemprosesan

Apabila operasi tulis yang kerap diperlukan, menggunakan kunci optimistik mungkin menjana banyak putaran, menggunakan CPU dan menjejaskan prestasi. Sebabnya ialah versi tidak konsisten dan percubaan semula diteruskan. Dalam kes ini, penguncian pesimis sesuai

Atas ialah kandungan terperinci Bagaimana untuk menggunakan penguncian pesimis dan penguncian optimistik dalam Mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam