作者DarkKiller (System hacked)
看板Database
标题Re: [SQL ] MS SQL Update Where中使用的栏位
时间Thu Jul 25 17:58:53 2013
※ 引述《daphnekang (戴芬妮)》之铭言:
: 不好意思..最近接了一个系统..看到里面的SQL 有个比较奇怪的设计方式
: SQL中要update的栏位, 竟使用在where条件值中
: UPDATE table1 SET flag ='B'
: WHERE flag ='A' AND currentDate = '20130724'
: 目前运行的资料库为 MS SQL 2000, 但之後会升到 2008
: 想请问各位DBA的专家..
: 这样的写法, MS SQL 底层会将where条件的资料锁定, 再做update吗?
: 还是会有怎样运作方式?
: 个人感觉这种是很危险的写法..
不会危险,这是 RDBMS 很常见的操作,而且背後都有很成熟的理论在撑。
: 请帮忙解惑..谢谢
SQL Server also provides the optimistic concurrency control mechanism,
which is similar to the multiversion concurrency control used in other
databases.
这段出自
https://en.wikipedia.org/wiki/Microsoft_SQL_Server 这里。
A snapshot transaction always uses optimistic concurrency control,
withholding any locks that would prevent other transactions from
updating rows.
这段出自
http://msdn.microsoft.com/en-us/library/tcbchxcb.aspx 这里。
MyISAM (MySQL) 用的是 table lock 解决,是很简单的方式。InnoDB 与 Oracle
用的是 MVCC,是目前最常见到的 RDBMS transaction 架构。而 Microsoft SQL
Server 用的是 OCC 架构,也是很成熟的架构。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.121.80.241