十 30
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。
举个例子:
假设有个表单products ,里面有id跟name二个栏位,id是主键。
例1: (明确指定主键,并且有此笔资料,row lock)
SELECT * FROM products WHERE id=’1′ FOR UPDATE;
例2: (明确指定主键,若查无此笔资料,无lock)
SELECT * FROM products WHERE id=’-1′ FOR UPDATE;
例2: (无主键,table lock)
SELECT * FROM products WHERE name=’Mouse’ FOR UPDATE;
例3: (主键不明确,table lock)
SELECT * FROM products WHERE id<>’1′ FOR UPDATE;
例4: (主键不明确,table lock)
SELECT * FROM products WHERE id LIKE ’1′ FOR UPDATE;
注1:
FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
注2:
要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。
<!-- JiaThis Button BEGIN -->
<style type="text/css">
#ckepop a:hover {
color:red;
background-color:#0063DC;
}
</style>
<div id="ckepop">
<a href="http://www.jiathis.com/share/" class="jiathis_txt" target="_blank">分享到:</a>
<a class="jiathis_button_tqq">腾讯微博</a>
<a class="jiathis_button_tsina">新浪微博</a>
<a class="jiathis_button_qzone">QQ空间</a>
<a class="jiathis_button_hi">百度空间</a>
<a class="jiathis_button_kaixin001">开心网</a>
<a class="jiathis_button_renren">人人网</a>
<a class="jiathis_button_xiaoyou">QQ校友</a>
<a href="http://www.jiathis.com/share/?uid=89488" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank">更多...</a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js?uid=89488" charset="utf-8"></script>
<!-- JiaThis Button END -->