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 -->

Leave a Reply