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行级锁、表级锁、页级锁详细介绍
- 通过mysql show processlist 命令检查mysql锁的方法
- MySQL Innodb表导致死锁日志情况分析与归纳
- Mysql数据库锁定机制详细介绍
- MYSQL锁表问题的解决方法
- 详解MySQL中的死锁情况以及对死锁的处理方法
- 一次Mysql死锁排查过程的全纪录
- mysql 数据库死锁原因及解决办法
- mysql数据库锁的产生原因及解决办法
- MySQL死锁问题分析及解决方法实例详解
- mysql 锁表锁行语句分享(MySQL事务处理)
- MySQL中Innodb的事务隔离级别和锁的关系的讲解教程
- Mysql(MyISAM)的读写互斥锁问题的解决方法
- mysql锁定单个表的方法
- 查找MySQL线程中死锁的ID的方法
- Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
- Mysql 数据库死锁过程分析(select for update)
- MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解
- mysql锁表和解锁语句分享
- mysql锁表和解锁语句分享
- mysql锁表和解锁语句分享
- mysql锁表和解锁语句分享
- mysql锁表和解锁语句分享
- oracle用户解锁(入园第一贡献,分享一篇文章)
- 在命令行下进行Oracle用户解锁的语句
- 极分享发布于2015-11-05 16:54 1/440 45个非常有用的 Oracle 查询语句
- SQL语句分享[不定期更新]
- 分享6个有用的MySQL语句
- 【分享】通过Excel生成批量SQL语句,处理大量数据的好办法
- 分享高性能批量插入和批量删除sql语句写法
- oracle查看表空间已分配和未分配空间的语句分享
- 给朋友写了一个从脚本文件逐行加载执行SQL语句的程序,现在分享给将来需要的朋友们参考
- mysql建表常用语句 个人笔记分享
- SQL2005查询表结构的SQL语句使用分享
- mysql建表常用sql语句个人经验分享
- mysql建表常用sql语句分享
- 友盟分享在appdelegate中的调用语句举例
- 网易视频云技术分享:HBase - 建表语句解析