对于MySQL来说,有三种锁的级别:页级、表级、行级

 

页级的典型代表引擎为BDB。 

表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 

行级的典型代表引擎为INNODB。 

-我们实际应用中用的最多的就是行锁。 

行级锁的优点如下: 

1)、当很多连接分别进行不同的查询时减小LOCK状态。 

2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。 

行级锁的缺点如下: 

1)、比页级锁和表级锁要占用更多的内存。 

2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。

3)、容易出现死锁。 

对于写锁定如下: 

1)、如果表没有加锁,那么对其加写锁定。 

2)、否则,那么把请求放入写锁队列中。 

对于读锁定如下: 

1)、如果表没有加写锁,那么加一个读锁。 

2)、否则,那么把请求放到读锁队列中。 

当然我们可以分别用low_priority
以及high_priority在写和读操作上来改变这些行为。 

如果想要在一个表上做大量的 INSERT 和 SELECT
操作,但是并行的插入却不可能时,可以将记录插入到临时表中,然后定期将临时表中的数据更新到实际的表里。可以用以下命令实现: 

mysql> LOCK TABLES real_table WRITE, insert_table
WRITE; 

mysql> INSERT INTO real_table SELECT * FROM
insert_table; 

mysql> TRUNCATE TABLE insert_table; 

mysql> UNLOCK TABLES; 

InnoDB 使用行级锁,BDB 使用页级锁。对于 InnoDB 和 BDB 存储引擎来说,是可能产生死锁的。这是因为
InnoDB 会自动捕获行锁,BDB 会在执行 SQL
语句时捕获页锁的,而不是在事务的开始就这么做。 

行级锁的优点有: 

在很多线程请求不同记录时减少冲突锁。 

事务回滚时减少改变数据。 

使长时间对单独的一行记录加锁成为可能。 

行级锁的缺点有: 

比页级锁和表级锁消耗更多的内存。 

当在大量表中使用时,比页级锁和表级锁更慢,因为他需要请求更多的所资源。 

当需要频繁对大部分数据做 GROUP BY
操作或者需要频繁扫描整个表时,就明显的比其它锁更糟糕。 

使用更高层的锁的话,就能更方便的支持各种不同的类型应用程序,因为这种锁的开销比行级锁小多了。 

表级锁在下列几种情况下比页级锁和行级锁更优越: 

很多操作都是读表。 

在严格条件的索引上读取和更新,当更新或者删除可以用单独的索引来读取得到时: 

UPDATE tbl_name SET column=value WHERE
unique_key_col=key_value; 

DELETE FROM tbl_name WHERE
unique_key_col=key_value; 

SELECT 和 INSERT 语句并发的执行,但是只有很少的 UPDATE 和 DELETE
语句。 

很多的扫描表和对全表的 GROUP BY 操作,但是没有任何写表。 

表级锁和行级锁或页级锁之间的不同之处还在于: 

将同时有一个写和多个读的地方做版本(例如在MySQL中的并发插入)。也就是说,数据库/表支持根据开始访问数据时间点的不同支持各种不同的试图。其它名有:时间行程,写复制,或者是按需复制。

代码如下:


//执行SQL语句 锁掉stat_num表 
$sql = "LOCK TABLES stat_num WRITE";
//表的WRITE锁定,阻塞其他所有mysql查询进程 
$DatabaseHandler->exeCute($sql); 
//执行更新或写入操作 
$sql = "UPDATE stat_num SET `correct_num`=`correct_num`+1 WHERE
stat_date='{$cur_date}'"; 
$DatabaseHandler->exeCute($sql); 
//当前请求的所有写操作做完后,执行解锁sql语句 
$sql = "UNLOCK TABLES"; 
$DatabaseHandler->exeCute($sql); 

版权声明:本文为博主原创文章,未经博主允许不得转载。

mysql锁表和解锁语句分享的更多相关文章

  1. [MySql]锁表与解锁

    摘要 为啥会出现锁表的情况?锁表会导致数据表的其他操作超时,频繁的插入修改查询很容易出现锁表的情况.如果遇到这种情况,临时的解决办法,可以通过下面的方式进行解锁.如果长期有效的解决,那么就需要优化项目 ...

  2. 【MySQL】MySQL 常用语法之锁表与解锁表

    mysql 锁表语句: Lock锁整张表: 写锁定: LOCK TABLES products WRITE: 写锁,锁定之后,只有当前线程可以进行读操作和写操作,其他线程读操作和写操作均被堵塞.... ...

  3. SQL Server 锁表、查询被锁表、解锁相关语句

    SQL Server 锁表.查询被锁表.解锁相关语句,供参考. --锁表(其它事务不能读.更新.删除) BEGIN TRAN SELECT * FROM <表名> WITH(TABLOCK ...

  4. sql server锁表、查询被锁表、解锁被锁表的相关语句

    MSSQL(SQL Server)在我的印象中很容易锁表,大致原因就是你在一个窗口中执行的DML语句没有提交,然后又打开了一个窗口对相同的表进行CRUD操作,这样就会导致锁表.锁表是一种保持数据一致性 ...

  5. MYSQL锁表问题解决

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 ? 1 mysql>show processlist; ...

  6. MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  7. MySQL锁表解决方法

    https://blog.csdn.net/a5582ddff/article/details/79566678 MySQL锁表解决方法 一.我的处理过程 1.查进程,主要是查找被锁表的那个进程的ID ...

  8. sqlserver锁表、解锁、查看销表 (转载)

    sqlserver中怎么锁表.解锁.查看销表呢,下面我以三个不同的实例给各位朋友详细介绍一下有需要的朋友可参考一下. 更多详细内容请查看:http://www.111cn.net/database/O ...

  9. Oracle的锁表与解锁

    Oracle的锁表与解锁 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) ...

随机推荐

  1. 窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的

    1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息.一个应用程序通过截获属于另一个窗口的消息,从而实现增加.监视或者修改那个窗口的缺省行为.子类化是用来改变或者扩展一 ...

  2. [笔记] 走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的

    走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的 保持专注. 不断更新优先级. 对产品有主人翁意识. (觉得做好产品是自己的职责, 不是应付工作) 你的用户如 ...

  3. java学习之多生产者和多消费者

    在上一节当中我们说道了,java多线程当中单个消费者对应单个生产者的关系.这个时候有几个点需要注意一下,第一个就是把if判断flag的语句改成while这样能够避免,比如如果我们这个时候用if的话判断 ...

  4. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)

    漏洞版本: mod_accounting 0.5 漏洞描述: BUGTRAQ ID: 62677 CVE ID: CVE-2013-5697 mod_accounting是Apache 1.3.x上的 ...

  5. BZOJ2038小Z的袜子(hose)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2343  Solved: 1077[Subm ...

  6. 【转】iOS开发:开发证书知识点总结

    原文网址:http://www.jianshu.com/p/9c166a5e4930 1. Error: An App ID with identifier "*" is not ...

  7. 【转】Android bluetooth介绍(二): android blueZ蓝牙代码架构及其uart 到rfcomm流程

    原文网址:http://blog.sina.com.cn/s/blog_602c72c50102uzoj.html 关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP ...

  8. (转载)PHP 判断常量,变量和函数是否存在

    (转载)http://www.jb51.net/article/17881.htm 如果你看懂了上面一句话,那么接下来都是废话,PHP手册写的还是很全的.一句话就把我标题中的问题全部解决了. 还是举几 ...

  9. POJ ---2531

    Network Saboteur Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8751   Accepted: 4070 ...

  10. 逐行返回http响应的内容

    前言 问题:1.什么是特殊字符? 2.为什么要处理特殊字符? 答:特殊字符指相对于传统或常用的符号外,使用频率较少字符且难以直接输入的符号,比如数学符号:单位符号:制表符等 有些符号在URL中是不能直 ...