mysql锁定单个表的方法

 更新时间:2014年05月16日 00:09:35   作者:  
这篇文章主要介绍了mysql锁定单个表的方法 ,需要的朋友可以参考下
mysql锁定单个表的方法

复制代码 代码如下:

mysql>lock table userstat read;
mysql>unlock tables;


页级的典型代表引擎为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);

相关文章

  • Windows下mysql 8.0.11 安装教程

    Windows下mysql 8.0.11 安装教程

    这篇文章主要为大家详细介绍了Windows下mysql 8.0.11安装教程 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • MySQL常用判断函数小结

    MySQL常用判断函数小结

    本文带大家一起来看一看MySQL中都有哪些常用的控制流函数,以及控制流函数的使用场景都有哪些,非常具有实用价值,需要的朋友可以参考下
    2023-05-05
  • MySQL 常用引擎总结分享

    MySQL 常用引擎总结分享

    这篇文章主要介绍了MySQL 常用引擎总结分享,MySQL有很多存储引擎,所谓的存储引擎是指用于存储、处理和保护数据的核心服务,更多常用引擎分享,需要的小伙伴可以参考下面文章内容
    2022-06-06
  • linux mysql 数据库开启外部访问设置指南

    linux mysql 数据库开启外部访问设置指南

    Linux下设置MySQL和允许外部机器访问,具体目录是具体情况而定,有的人是安装了在个人目录下,则找到对应的目录则可以
    2012-11-11
  • Mysql基础教程之增删改查语句

    Mysql基础教程之增删改查语句

    这篇文章主要给大家介绍了关于Mysql基础教程之增删改查语句的相关资料,以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,需要的朋友可以参考下
    2023-10-10
  • Mysql 5.6使用配置文件my.ini来设置长时间连接数据库的问题

    Mysql 5.6使用配置文件my.ini来设置长时间连接数据库的问题

    这篇文章主要介绍了Mysql 5.6使用配置文件my.ini来设置长时间连接数据库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 解决MySQL数据库中文模糊检索问题的方法

    解决MySQL数据库中文模糊检索问题的方法

    解决MySQL数据库中文模糊检索问题的方法...
    2007-11-11
  • MySQL查看、创建和删除索引的方法

    MySQL查看、创建和删除索引的方法

    这篇文章主要介绍了MySQL查看、创建和删除索引的方法,结合实例形式较为详细的分析了MySQL中索引的作用,以及查看、创建及删除索引的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • mysql5.0入侵测试以及防范方法分享

    mysql5.0入侵测试以及防范方法分享

    这篇文章主要介绍了mysql5入侵测试以及防范方法,大家参考使用吧
    2013-12-12
  • Mysql实现null值排在最前/最后的方法示例

    Mysql实现null值排在最前/最后的方法示例

    这篇文章主要给大家介绍了关于Mysql实现null值排在最前/最后的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02

最新评论