MySQL数据库事务transaction示例讲解教程 |
1銆佷粈涔堟槸浜嬪姟锛?/h2>涓涓簨鍔℃槸涓涓畬鏁寸殑涓氬姟閫昏緫鍗曞厓锛屼笉鍙啀鍒嗐?br /> 姣斿锛氶摱琛岃处鎴疯浆璐︼紝浠嶢璐︽埛鍚態璐︽埛杞处10000锛岄渶瑕佹墽琛屼袱鏉pdate璇彞锛?/p> update t_act set balance=balance-10000 where actno='act-001'; update t_act set balance=balance+10000 where actno='act-0021'; 浠ヤ笂涓ゆ潯DML璇彞蹇呴』鍚屾椂鎴愬姛锛屾垨鑰呭悓鏃跺け璐ワ紝涓嶅厑璁稿嚭鐜颁竴鏉℃垚鍔燂紝涓鏉″け璐ャ?br /> 瑕佹兂淇濊瘉浠ヤ笂鐨勪袱鏉ML璇彞锛屽悓鏃舵垚鍔熸垨鑰呭悓鏃跺け璐ワ紝閭d箞灏遍渶瑕佷娇鐢ㄦ暟鎹簱鐨?br /> 鈥滀簨鍔℃満鍒垛濄?/p> 2銆佸拰浜嬪姟鐩稿叧鐨勮鍙ュ彧鏈夎繖3涓狣ML璇彞锛歩nsert銆乨elete銆乽pdate鈥滀负浠涔堝彧鏈夎繖3涓狣ML璇彞锛歩nsert銆乨elete銆乽pdate锛熲?br /> 鍥犱负瀹冧滑杩欎笁涓鍙ラ兘鏄拰鏁版嵁搴撹〃涓殑"鏁版嵁鐩稿叧"鐨勩備簨鍔$殑瀛樺湪鏄负浜嗕繚璇佹暟鎹殑瀹屾暣鎬э紝瀹夊叏鎬с?/p> 3銆佸亣璁炬墍鏈夌殑涓氬姟閮借兘浣跨敤1鏉ML璇彞鎼炲畾锛岃繕闇瑕佷簨鍔℃満鍒跺悧锛?/h2>涓嶉渶瑕佷簨鍔°?br /> 浣嗗疄闄呮儏鍐典笉鏄繖鏍风殑锛岄氬父涓涓簨鍎?鈥滀簨鍔♀?闇瑕佸鏉ML璇彞鍏卞悓鑱斿悎瀹屾垚銆?/p> 4銆佷簨鍔$殑鍘熺悊娉ㄦ剰锛?br /> 涓鏃︽彁浜や簨鍔★紝灏变細鎶婂巻鍙叉搷浣滄寔涔呭寲鍒扮‖鐩樹笂鍘伙紝鎸佷箙鍖栧畬鎴愬悗锛屾竻绌哄巻鍙茶褰曘?br /> 涓鏃﹀洖婊氫簨鍔★紝灏变細鎶婂巻鍙茶褰曠洿鎺ユ竻绌烘帀锛岃屼笉鎸佷箙鍖栧埌纭洏涓?br /> 浜嬪姟鎿嶄綔锛岃繕鍙互璁捐淇濆瓨鐐癸細浜嗚В銆?/p> 5銆佷簨鍔$殑鍥涘ぇ鐗规э細ACID浜嬪姟鍖呮嫭鍥涘ぇ鐗规э細ACID 涓嬮潰瀵逛笂杩颁簨鍔″洓澶х壒鎬э紝杩涜涓涓洿涓鸿缁嗙殑璇存槑 6銆佸叧浜庝簨鍔′箣闂寸殑闅旂鎬?/h2>"浜嬪姟鐨勯殧绂绘у瓨鍦ㄩ殧绂荤骇鍒紝鐞嗚涓婇殧绂荤骇鍒寘鎷?涓? 1锛夌涓绾у埆锛氳鏈彁浜わ紙read uncommitted锛?br />瀵规柟鐨勪簨鍔¤繕娌℃湁鎻愪氦锛屽綋鍓嶄簨鍔″彲浠ヨ鍙栧埌瀵规柟涓烘彁浜ょ殑鏁版嵁銆?br /> 璇绘湭鎻愪氦瀛樺湪鐨勯棶棰橈細"鑴忚鐜拌薄"锛岃〃绀鸿鍒颁簡鑴忔暟鎹?br /> "鑴忚"锛氭寚鐨勬槸涓涓簨鍔℃鍦ㄤ慨鏀规暟鎹紝浣嗘槸杩欑淇敼骞舵病鏈夋彁浜ゅ埌鏁版嵁搴撱?br /> 鑰屽彟涓涓簨鍔★紝璁块棶鍒颁簡璇ユ暟鎹紝姝ゆ椂杩欎釜鏁版嵁灞炰簬銆愯剰鏁版嵁銆戯紝鍥犺屽彨鑴忚銆?/p> 2锛夌浜岀骇鍒細璇诲凡鎻愪氦锛坮ead committed锛?br />瀵规柟浜嬪姟鎻愪氦鍚庣殑鏁版嵁锛屾垜鏂瑰彲浠ヨ鍙栧埌銆?br /> 杩欑闅旂绾у埆瑙e喅浜嗭細鑴忚鐜拌薄娌℃湁浜嗐?br /> 璇诲凡鎻愪氦瀛樺湪鐨勯棶棰橈細涓嶅彲閲嶅璇汇?/p> 3锛夌涓夌骇鍒細鍙噸澶嶈锛坮epeatable read锛?br />杩欑闅旂绾у埆瑙e喅浜嗭細涓嶅彲閲嶅璇婚棶棰樸?br /> 杩欑绾у埆瀛樺湪鐨勯棶棰橈細璇诲彇鍒扮殑鏁版嵁鏄够鎯筹紝鍗宠鍙栫殑鏄浠芥暟鎹?/p> 4锛夌鍥涚骇鍒細搴忓垪鍖栬/涓茶鍖栬锛坰erializable锛?br />瑙e喅浜嗘墍鏈夐棶棰樸?br /> 浣嗘槸鏁堢巼浣庯紝闇瑕佷簨鍔℃帓闃熴?/p> "闇瑕佹敞鎰忕殑鏄? 7銆佹紨绀轰簨鍔$殑闅旂绾у埆(婕旂ず鏁版嵁鑷繁閫犱竴浜?1锛夋紨绀轰簨鍔′箣鍓嶏紝闇瑕佹帉鎻$殑鐭ヨ瘑鐐广?/h3>
1锛塵ysql榛樿鎯呭喌涓嬶紝浜嬪姟鏄嚜鍔ㄦ彁浜ょ殑銆? 2锛変粈涔堟槸鑷姩鎻愪氦锛? 鍙鏄墽琛屼换鎰忎竴鏉ML璇彞锛屽垯鑷姩鎻愪氦涓娆°? 鍥犳锛屽湪婕旂ず浜嬪姟涔嬪墠锛屽繀椤诲厛鍏抽棴鑷姩鎻愪氦銆? "鍏抽棴鑷姩鎻愪氦璇彞"锛歴tart transaction; 3锛?婕旂ず浜嬪姟闇瑕佺煡閬撶殑3鏉″懡浠わ細" -- 鍏抽棴鑷姩鎻愪氦浜嬪姟鍔熻兘銆? start transaction; -- 鎻愪氦浜嬪姟銆? commit; -- 鍥炴粴浜嬪姟锛屽彧鑳藉洖婊氬埌涓婁竴娆$殑鎻愪氦鐐广? rollback; 2锛夎缃叏灞浜嬪姟闅旂绾у埆銆?/h3>
"璁剧疆鍏ㄥ眬浜嬪姟闅旂绾у埆锛岃缃畬鎴愬悗锛岄鍑洪噸鏂扮櫥闄嗐? -- 璁剧疆绗竴绾у埆 set global transaction isolation level read uncommitted; -- 璁剧疆绗簩绾у埆 set global transaction isolation level read committed; -- 璁剧疆绗笁绾у埆锛堢郴缁熼粯璁ょ殑浜嬪姟绾у埆锛屼笉鐢ㄨ缃級 set global transaction isolation level repeatable read; --璁剧疆绗洓绾у埆 set global transaction isolation level serializable; "鏌ョ湅鍏ㄥ眬浜嬪姟闅旂绾у埆" mysql> select @@global.tx_isolation; +-----------------------+ | @@global.tx_isolation | +-----------------------+ | REPEATABLE-READ | +-----------------------+ 1 row in set, 1 warning (0.00 sec) 3锛夋紨绀鸿鏈彁浜ゃ?/h3>棣栧厛锛岃缃叏灞浜嬪姟闅旂绾у埆銆?/p> 涓嬮潰杩涜姝e紡鐨勬紨绀猴細 4锛夋紨绀鸿宸叉彁浜?/h3>棣栧厛锛岃缃叏灞浜嬪姟闅旂绾у埆銆?/p> 涓嬮潰杩涜姝e紡鐨勬紨绀猴細 5锛夋紨绀哄彲閲嶅璇?/h3>棣栧厛锛岃缃叏灞浜嬪姟闅旂绾у埆銆?/p> 涓嬮潰杩涜姝e紡鐨勬紨绀猴細 杩欎釜闇瑕佹敞鎰忥細 杩欓噷婕旂ず鐨勬槸"鍙噸澶嶈"锛屾垜浠湪鍙宠竟绐楀彛婕旂ず浜嬪姟鐨勪竴浜涘垪杩囩▼锛屽乏杈圭獥鍙?br /> 鏍规湰鏃犳硶璇诲彇锛屽乏杈圭獥鍙h鍙栧埌鐨勶紝濮嬬粓鏄師濮嬫暟鎹殑澶囦唤鏁版嵁銆?/p> 鎬庝箞鐞嗚В鍛紵 浣犲埆蹇樿浜嗭紝宸﹁竟绐楀彛锛屼篃鏄紑鍚簨鍔″姛鑳戒簡鐨勶紝start transaction;鍙 宸﹁竟榛戠獥鍙o紝瑕佹庝箞鎵嶅彲浠ョ湅瑙佽繖涓彉鍖栧憿锛? 鍙湁宸﹁竟杩欎釜榛戠獥鍙o紝鍏堢粨鏉熶簡褰撳墠榛戠獥鍙g殑浜嬪姟锛岄噸鏂板啀娆¤鍙栵紝灏卞彲浠ョ湅 6锛夋紨绀哄簭鍒楀寲璇?/h3>棣栧厛锛岃缃叏灞浜嬪姟闅旂绾у埆銆?/p> 涓嬮潰杩涜姝e紡鐨勬紨绀猴細 褰撳乏杈圭獥鍙o紝浣跨敤"commit"鍛戒护锛屾彁浜や簨鍔′互鍚庯紝鎴戜滑鍐嶇湅鍙宠竟绐楀彛鐨勫彉鍖栥?/p> 浠ヤ笂灏辨槸MySQL鏁版嵁搴撲簨鍔ransaction绀轰緥璁茶В鏁欑▼鐨勮缁嗗唴瀹癸紝鏇村鍏充簬MySQL鏁版嵁搴撲簨鍔ransaction鐨勮祫鏂欒鍏虫敞鑴氭湰涔嬪鍏跺畠鐩稿叧鏂囩珷锛?/p> |