SQL 事务与并发
a) 应用程序事务与数据库存储引擎事务 b) 应用程序处理并发与数据库存储引擎处理并发 为什么要从两个方向来考虑呢,是有原因的,首先机制处理方式,以及在软件中的所处的环境以及情节都不同。所以我们可以将事务与并发分为两个部分来讲,这文主要讲MSSQL的事
a) 应用程序事务与数据库存储引擎事务
b) 应用程序处理并发与数据库存储引擎处理并发
为什么要从两个方向来考虑呢,是有原因的,首先机制处理方式,以及在软件中的所处的环境以及情节都不同。所以我们可以将事务与并发分为两个部分来讲,这文主要讲MSSQL的事务,我会在接下来的文章谈谈java或者C#处理事务以及结合Martin Fowler说到的并发架构模式探讨。
什么是事务呢?
引言:
假设小强有两张银行卡A和B,卡A内有1000元存款。一天,小强来到银行,打算将卡A中的200元转账到卡B中。当工作人员刚打卡A中的金额减少200元时,银行突然停电了(这种情况并不多见,香港服务器,我们假设银行也没有备用电源)。那么,恢复供电后,小强查询卡A的金额,会出现怎样的情况?
答案是肯定的,还是1000元。这是因为卡B并没有增加200元。但明明工作人员已经将卡A减少了200元,为何还有1000元呢?这就是事务技术的神奇之处。
所谓事务,指的是一个单元的工作。这个单元中可能包括很多工作步骤,服务器空间,它们要么全做,要么全不做。数据库中执行的操作都是以事务为单元进行的。例如,小强将卡A的钱转到卡B,包括两个步骤:从卡A中减少200元和将卡B增加200元,这就是一个事务。如果只做了第一步,未做第二步,则第一步操作也会被撤销。
MSDN给出的定义:事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。
事务执行模式
1.自动提交事务(SQL Server默认的事务执行模式)
2.显示事务(begin transaction,commit,rollback)
事务以begin transaction 开始,以commit(提交)或rollback(发生故障时,回滚)结束
例1:假设在选修表中,美国服务器,学号'1002'的学生由于某些原因不选1号课程而改选4号课程,并且该课程的考试成绩为80分。
如果我们将这两个步骤定义为一个事务的话,代码如下:
begin transaction update 选修 学号=and 课程号= go update 选修 and 课程号= commit select * from 选修

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Teknik concurrency dan multithreading menggunakan fungsi Java boleh meningkatkan prestasi aplikasi, termasuk langkah berikut: Memahami konsep concurrency dan multithreading. Manfaatkan pustaka konkurensi dan berbilang benang Java seperti ExecutorService dan Callable. Amalkan kes seperti pendaraban matriks berbilang benang untuk memendekkan masa pelaksanaan. Nikmati kelebihan peningkatan kelajuan tindak balas aplikasi dan kecekapan pemprosesan yang dioptimumkan yang dibawa oleh concurrency dan multi-threading.

Concurrency dan coroutine digunakan dalam reka bentuk GoAPI untuk: Pemprosesan berprestasi tinggi: Memproses berbilang permintaan serentak untuk meningkatkan prestasi. Pemprosesan tak segerak: Gunakan coroutine untuk memproses tugas (seperti menghantar e-mel) secara tidak segerak, melepaskan utas utama. Pemprosesan strim: Gunakan coroutine untuk memproses strim data dengan cekap (seperti bacaan pangkalan data).

Unit menguji fungsi serentak adalah penting kerana ini membantu memastikan kelakuan mereka yang betul dalam persekitaran serentak. Prinsip asas seperti pengecualian bersama, penyegerakan dan pengasingan mesti dipertimbangkan semasa menguji fungsi serentak. Fungsi serentak boleh diuji unit dengan mensimulasikan, menguji keadaan perlumbaan dan mengesahkan keputusan.

Isu konkurensi dalam fungsi berbilang benang PHP boleh diselesaikan dengan menggunakan alat penyegerakan (seperti kunci mutex) untuk mengurus akses berbilang benang kepada sumber yang dikongsi. Gunakan fungsi yang menyokong pilihan pengecualian bersama untuk memastikan fungsi itu tidak dipanggil semula semasa urutan lain sedang dilaksanakan. Balut fungsi bukan masuk semula dalam blok disegerakkan untuk melindungi panggilan fungsi.

Pustaka konkurensi Java menyediakan pelbagai alatan, termasuk: Kolam benang: digunakan untuk mengurus benang dan meningkatkan kecekapan. Kunci: digunakan untuk menyegerakkan akses kepada sumber yang dikongsi. Halangan: Digunakan untuk menunggu semua utas mencapai titik yang ditentukan. Operasi atom: unit tidak boleh dibahagikan, memastikan keselamatan benang. Baris serentak: Barisan selamat benang yang membenarkan berbilang benang beroperasi serentak.

Transaksi memastikan integriti data pangkalan data, termasuk atomicity, konsistensi, pengasingan dan ketahanan. JDBC menggunakan antara muka Sambungan untuk menyediakan kawalan transaksi (setAutoCommit, commit, rollback). Mekanisme kawalan konkurensi menyelaraskan operasi serentak, menggunakan kunci atau kawalan konkurensi optimis/pesimis untuk mencapai pengasingan transaksi untuk mengelakkan ketidakkonsistenan data.

Kelas atom ialah kelas selamat benang di Java yang menyediakan operasi tanpa gangguan dan penting untuk memastikan integriti data dalam persekitaran serentak. Java menyediakan kelas atom berikut: AtomicIntegerAtomicLongAtomicReferenceAtomicBoolean Kelas ini menyediakan kaedah untuk mendapatkan, menetapkan dan membandingkan nilai untuk memastikan bahawa operasi adalah atom dan tidak akan diganggu oleh benang. Kelas atom berguna apabila bekerja dengan data kongsi dan mencegah rasuah data, seperti mengekalkan akses serentak ke kaunter kongsi.

Kaedah pengesanan dan pembaikan transaksi PHP Semasa proses pembangunan, kami sering melibatkan operasi pangkalan data. Untuk memastikan integriti dan ketekalan data, apabila memproses operasi pangkalan data, kami sering menggunakan transaksi untuk memastikan keatoman bagi satu siri operasi. Walau bagaimanapun, dalam proses pembangunan sebenar, kadangkala ralat berlaku dalam urus niaga, mengakibatkan operasi data tidak lengkap atau tidak konsisten. Artikel ini akan memperkenalkan cara mencari dan membetulkan ralat transaksi dalam PHP, sambil memberikan contoh kod khusus. Untuk mencari ralat transaksi dalam PHP, kita boleh menggunakan MySQLi atau
