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

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

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

行级锁的优点如下:

  1. 当很多连接分别进行不同的查询时减小LOCK状态。
  2. 如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。

行级锁的缺点如下:

  1. 比页级锁和表级锁要占用更多的内存。
  2. 进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。
  3. 容易出现死锁。

对于写锁定如下:

  1. 如果表没有加锁,那么对其加写锁定。
  2. 否则,那么把请求放入写锁队列中。

对于读锁定如下:

  1. 如果表没有加写锁,那么加一个读锁。
  2. 否则,那么把请求放到读锁队列中。
    当然我们可以分别用low_priority 以及high_priority在写和读操作上来改变这些行为。
//执行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);

results matching ""

    No results matching ""