WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院数据库MSSQL Server SQL-92 隔离级别理解和测试 阅读

SQL-92 隔离级别理解和测试

 2008-08-26 09:55:58 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺鍦拡閸嬪棝鎯€椤忓浂妯勯梺鍝勬湰濞叉ḿ鎹㈠┑濠勭杸闁哄洨濮烽悰銉╂⒒娴e搫甯跺鐟帮攻缁傚秴饪伴崼姘e亾閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡涱€楀褜鍠栭湁闁绘ɑ鐟ョ€氼喚绮绘ィ鍐╃厱妞ゆ劑鍊曢弸搴ㄦ煟韫囧鍔滈柕鍥у瀵潙螣閸濆嫬袝婵$偑鍊戦崹娲偡閳哄懎绠栭柍鈺佸暞閸庣喖鏌曢崶褍绨婚柟鍑ゆ嫹
核心提示:以前对数据库的隔离级别,有所了解,SQL-92 隔离级别理解和测试,但不知道真正其中的区别,今天就讨论一下这4个隔离级别 下面是4个隔离级别,在执行2这时:在事务1执行时,事务2可以增加一条"id=1"的数据,在SQL server 2005里的介绍:READ UNCOMMITTED指定语句可以读取

以前对数据库的隔离级别,有所了解,但不知道真正其中的区别。今天就讨论一下这4个隔离级别

下面是4个隔离级别,在SQL server 2005里的介绍:

READ UNCOMMITTED

指定语句可以读取已由其他事务修改但尚未提交的行。

READ COMMITTED

指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据

REPEATABLE READ

其他事务可以插入与当前事务所发出语句的搜索条件相匹配的新行。如果当前事务随后重试执行该语句,它会检索新行,从而产生幻读

SERIALIZABLE

范围锁处于与事务中执行的每个语句的搜索条件相匹配的键值范围之内。这样可以阻止其他事务更新或插入任何行

建立环境:

createtablet_emp(idnumeric(10)
  ,namevarchar(10),
  salarynumeric(10,2));

插入数据:

  insertintot_empvalues(1,'jack',10000.50);
  insertintot_empvalues(2,'jack2',8000.50);
  insertintot_empvalues(3,'jack3',120000);
  insertintot_empvalues(4,'jack4',5000);
  insertintot_empvalues(5,'jack5',3000);

脏读

如果一个事务在提交操作结果之前,另一个事务可以看到该结果,就会发生这种情况

测试语句一:

 SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED
  begintran
  select*fromdbo.t_empwhereid=1

测试语句二:

SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED
  begintran
  updatet_empsetname='zping.com'whereid=1

这时在两个窗体间执行,在一中可以看到,二中未提交的数据。

不可重复读(也称为模糊读 (Fuzzy Read))

如果一个事务在提交结果之前,另一个事务可以修改和删除它

显示例子:

   SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
  begintran
  select*fromdbo.t_empwhereid=1waitfordelay'00:00:03'
  select*fromdbo.t_empwhereid=1
  SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
  begintran
  --1,insertintot_empvalues(1,'33',434)
  --2,deletet_empwhereid=1
  --3;updatet_empsetname='fff'whereid=1
  --4;updatet_empsetid=1whereid=2
  commit

一个事务读取数据后,另一个事务修改第一个事务读取当前结果,情况如下:

对应1,增加一条“id=1”的记录。

对应2,将"id=1"的数据记录删除。

对应2,修改结果“id=1"记录其他列的信息。

对应3,修改数据”id=2“的数据为”id=1“的记录。

这时是看不到事务未提交的数据的。

幻像读

如果一个事务在提交查询结果之前,另一个事务可以更改该结果

测试例子:

  SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD
  begintran
  select*fromdbo.t_empwaitfordelay'00:00:03'
  select*fromdbo.t_emp
  SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD
  begintran
  insertintot_empvalues(1,'33',434)
  commit

先执行1,在执行2

这时:

在事务1执行时,事务2可以增加一条"id=1"的数据,造成幻影读。

Tags:SQL 隔离 级别

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接