mysql bdb 锁_MySQL_mysql锁表和解锁语句分享,页级的典型代表引擎为BDB。 表 - phpStudy...

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);相关阅读:

Oracle中忘记System和Sys密码后的处理方法

CSS常用属性缩写实例

vbs下一些取特殊路径的方法总结

EJB 3.0开发指南之多表映射

教你使用monit监控Linux系统

JQuery Tips(4) 一些关于提高JQuery性能的Tips

System.Runtime.InteropServices.COMException的解决方法

基于客户端的分页导航(2)

js中匿名函数的N种写法

基于mysql的论坛(4)

DIV CSS列形导航一例

Access中查询某个分组中多行字段值的拼接字串的方法

ubuntu linux下如何使用终端命令行上网?

javascript indexOf方法、lastIndexOf 方法和substring 方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值