Rumah pangkalan data tutorial mysql SQL Server 事务和锁详解

SQL Server 事务和锁详解

Jun 07, 2016 pm 05:48 PM
sql server

本文章简单的介绍了关于SQL Server,事务和锁的常见问题与用法同时为初学者提供好的参考意见,有需要的可以参考一下。

最近在项目中进行压力测试遇到了的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:

Salin selepas log masuk
 代码如下 复制代码
SELECT @findCount=COUNT(id) FROM MyTable
WHERE [fk_related_id]=@Argument

IF (@findCount > 0)
BEGIN
	ROLLBACK TRANSACTION
	RETURN ERROR_CODE
END

INSERT INTO MyTable ([fk_related_id],…)
VALUES (@Argument,…)

COMMIT TRANSACTION
RETURN SUCCESS_CODE
Salin selepas log masuk
在搞清楚这个问题的过程中做了不少的实验,与各位共享。这一篇是开篇,主要说明的是 SQL Server 的四种(其实还有别的)经典的事务隔离级别,以及在不同的隔离级别下锁的使用手段,以及所带来的不同的数据一致性。

SQL Server 中锁的种类(Schema操作就暂时不涉及了)

锁类型 描述
(Shared Lock) 用于只读操作数据锁定
(Update Lock) 用于数据的更新,在数据真正的需要更新的时候会申请升级为X锁。
X(Exclusive Lock) 独占锁,用于数据的更改。
Key-Range Lock(稍后讨论) 仅仅在 Serializable 隔离级别保护数据,以避免任何有可能使得本事务第二次读取信息产生错误的数据插入操作

各个事务隔离级别下锁的使用

SQL Server 中有四种事务隔离级别,具体的大家去参建 MSDN。下面列出在不同的事务隔离级别下这些锁是如何使用的:

隔离级别 读数据锁状态 写数据锁状态 锁持有时间
Read Uncommitted 不获得任何锁 不获得任何锁  
Read Committed 数据获得S锁 对于 INSERT、DELETE、UPDATE的执行,获得X锁;对于UPDATE的标记,获得U锁; 读完即释放,并不持有至事务结束。
Repeatable Read 数据获得S锁 对于 INSERT、DELETE、UPDATE的执行,获得X锁;对于UPDATE的标记,获得U锁; 持有至事务结束
Serializable 数据获得S锁,同时获得Key-Range锁。 对于 INSERT、DELETE、UPDATE的执行,获得X锁;对于UPDATE的标记,获得U锁,同时获得Key-Range锁。 持有至事务结束

我们可以利用这些知识形象说明各个隔离级别下的数据一致性:

Read Uncommitted 级别

(1)脏读

image

(2)更新丢失

image

(3)不可重复读

image

(4)幻读

clip_image001

Read Committed 级别

(1)脏读

clip_image001[5]

(2)更新丢失

clip_image002

(3)不可重复读

clip_image003

(4)幻读

clip_image004

Repeatable Read 级别

(1)脏读

clip_image005

(2)更新丢失

clip_image006

(3)不可重复读

clip_image007

(4)幻读

clip_image008

Serializable 级别

(1)脏读

clip_image009

(2)更新丢失

clip_image010

(3)不可重复读

clip_image011

(4)幻读

clip_image012

我们从上图可以比较直观的看到以下的结论

  脏读 更新丢失 不可重复读 幻读
Read Uncommitted 可能 可能 可能 可能
Read Committed 不可能 可能 可能 可能
Repeatable Read 不可能 不可能 不可能 可能
Serializable 不可能 不可能 不可能 不可能

这一篇到此为止,下一篇详细介绍 Key-Range Lock 并分析开篇提到的死锁问题

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perisian pelayan microsoft sql? Apakah perisian pelayan microsoft sql? Feb 28, 2023 pm 03:00 PM

Microsoft SQL Server ialah sistem pengurusan pangkalan data relasi yang dilancarkan oleh Microsoft Ia adalah platform pangkalan data yang komprehensif yang menggunakan alat perisikan perniagaan (BI) bersepadu untuk menyediakan pengurusan data peringkat perusahaan tahap integrasi dengan perisian yang berkaitan Kelebihan tinggi. Enjin pangkalan data SQL Server menyediakan fungsi storan yang lebih selamat dan boleh dipercayai untuk data hubungan dan data berstruktur, membolehkan pengguna membina dan mengurus aplikasi data yang tersedia dan berprestasi tinggi untuk perniagaan.

Pelayan SQL atau MySQL? Penyelidikan baharu mendedahkan pilihan pangkalan data terbaik. Pelayan SQL atau MySQL? Penyelidikan baharu mendedahkan pilihan pangkalan data terbaik. Sep 08, 2023 pm 04:34 PM

SQLServer atau MySQL? Penyelidikan terkini mendedahkan pemilihan pangkalan data terbaik Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet dan data besar, pemilihan pangkalan data telah menjadi isu penting yang dihadapi oleh perusahaan dan pembangun. Di antara banyak pangkalan data, SQL Server dan MySQL, sebagai dua pangkalan data hubungan yang paling biasa dan digunakan secara meluas, adalah sangat kontroversi. Jadi, antara SQLServer dan MySQL, yang manakah harus anda pilih? Penyelidikan terkini menjelaskan masalah ini untuk kami. Pertama, biarkan

Pembangunan pangkalan data PHP dan SQL Server Pembangunan pangkalan data PHP dan SQL Server Jun 20, 2023 pm 10:38 PM

Dengan populariti Internet, pembangunan laman web dan aplikasi telah menjadi perniagaan utama banyak syarikat dan individu. Pangkalan data PHP dan SQLServer adalah dua alat yang sangat penting. PHP ialah bahasa skrip sebelah pelayan yang boleh digunakan untuk membangunkan laman web dinamik SQLServer ialah sistem pengurusan pangkalan data hubungan yang dibangunkan oleh Microsoft dan mempunyai pelbagai senario aplikasi. Dalam artikel ini, kita akan membincangkan pembangunan PHP dan SQL Server, serta kelebihan, kelemahan dan kaedah aplikasinya. Pertama, mari

Bagaimana untuk menyambung ke pangkalan data Microsoft SQL Server menggunakan PDO Bagaimana untuk menyambung ke pangkalan data Microsoft SQL Server menggunakan PDO Jul 29, 2023 pm 01:49 PM

Pengenalan kepada cara menggunakan PDO untuk menyambung ke pangkalan data Microsoft SQL Server: PDO (PHPDataObjects) ialah antara muka bersatu untuk mengakses pangkalan data yang disediakan oleh PHP. Ia memberikan banyak kelebihan, seperti melaksanakan lapisan abstraksi pangkalan data dan menjadikannya mudah untuk bertukar antara jenis pangkalan data yang berbeza tanpa mengubah suai sejumlah besar kod. Artikel ini akan memperkenalkan cara menggunakan PDO untuk menyambung ke pangkalan data Microsoft SQL Server dan menyediakan beberapa contoh kod yang berkaitan. langkah

Analisis ringkas tentang lima kaedah menyambungkan SQL Server dengan PHP Analisis ringkas tentang lima kaedah menyambungkan SQL Server dengan PHP Mar 21, 2023 pm 04:32 PM

Dalam pembangunan web, gabungan PHP dan MySQL adalah sangat biasa. Walau bagaimanapun, dalam beberapa kes, kita perlu menyambung kepada jenis pangkalan data lain, seperti SQL Server. Dalam artikel ini, kami akan membincangkan lima cara berbeza untuk menyambung ke SQL Server menggunakan PHP.

SQL Server dan MySQL bersaing, bagaimana untuk memilih penyelesaian pangkalan data yang terbaik? SQL Server dan MySQL bersaing, bagaimana untuk memilih penyelesaian pangkalan data yang terbaik? Sep 10, 2023 am 08:07 AM

Dengan pembangunan Internet yang berterusan, pemilihan pangkalan data menjadi semakin penting. Di antara banyak pangkalan data, SQLServer dan MySQL adalah dua pilihan berprofil tinggi. SQLServer ialah sistem pengurusan pangkalan data hubungan yang dibangunkan oleh Microsoft, manakala MySQL ialah sistem pengurusan pangkalan data hubungan sumber terbuka. Jadi bagaimana untuk memilih penyelesaian pangkalan data terbaik antara SQLServer dan MySQL? Pertama, kita boleh membandingkan kedua-dua pangkalan data ini dari segi prestasi. SQLServer sedang diproses

SQL Server vs. MySQL: Pangkalan data manakah yang lebih sesuai untuk seni bina ketersediaan tinggi? SQL Server vs. MySQL: Pangkalan data manakah yang lebih sesuai untuk seni bina ketersediaan tinggi? Sep 10, 2023 pm 01:39 PM

SQL Server vs. MySQL: Pangkalan data manakah yang lebih sesuai untuk seni bina ketersediaan tinggi? Dalam dunia dipacu data hari ini, ketersediaan yang tinggi adalah salah satu keperluan untuk membina sistem yang boleh dipercayai dan stabil. Sebagai komponen teras penyimpanan dan pengurusan data, ketersediaan tinggi pangkalan data adalah penting untuk operasi perniagaan perusahaan. Di antara banyak pangkalan data, SQLServer dan MySQL adalah pilihan biasa. Jadi dari segi seni bina ketersediaan tinggi, pangkalan data manakah yang lebih sesuai? Artikel ini akan membandingkan kedua-duanya dan memberikan beberapa cadangan.

Perbandingan SQL Server vs. MySQL: Mana yang lebih baik untuk pemprosesan data berskala besar? Perbandingan SQL Server vs. MySQL: Mana yang lebih baik untuk pemprosesan data berskala besar? Sep 09, 2023 am 09:36 AM

SQLServer dan MySQL kini merupakan dua sistem pengurusan pangkalan data hubungan (RDBMS) yang sangat popular. Kedua-duanya adalah alat yang berkuasa untuk menyimpan dan mengurus data berskala besar. Walau bagaimanapun, mereka mempunyai beberapa perbezaan dalam mengendalikan data berskala besar. Artikel ini akan membandingkan SQL Server dan MySQL, memfokuskan pada kesesuaian mereka untuk pemprosesan data berskala besar. Mula-mula, mari kita fahami ciri-ciri asas SQLServer dan MySQL. SQLServer dibangunkan oleh Microsoft

See all articles