PHP视频教学,让你更快更轻松的掌握PHP。

查看完整版本: 锁定

极品黑公子 2007-12-4 10:40

锁定

支持事务的数据库类型会如下处理
(isam,myisam,heap数据表类型不支持事务innoDB
BDB支持事务)
  
$sql1  =  "set  auto_commite=0";  
$sql2  =  "begin";  
$sql3  =  "update......";  
$sql4  =  "update.......";  
$sql5  =  "commite";  
$sql6  =  "rollback";  

mysql_query($sql1);  
mysql_query($sql2);  
mysql_query($sql3);  
mysql_query($sql4);  
if(mysql_errno)  
       mysql_query($sql5);  
else  
       mysql_query($sql6);

不是所有的类据库类型都支持事务,所以就不支持rollback,想要在数据发生不一致时,得到相应的处理很难
mysql以锁表的形式解决

LOCK TABLES 表 WRITE;
INSERT INTO 表 VALUES ( XX );
UPDATE 该表 SET 字段=  XXX WHERE XXX ;
UNLOCK TABLES;

在手册中有这一段话算是对读 写锁定的定义:
写操作时,需要申请一个独占性的锁,也就是说在写操作其间,该表只能由写操作的客户使用。读操作时,客户必须申请一个允 许其他客户对数据表进行写操作的锁,以确保客户在读的过程中数据表不会发生改变。但读操作锁不是独占的,可有多个读操作同时作用于同一个数据表。

LOCK TABLES trans READ, customer WRITE;
SELECT SUM(value) FROM trans WHERE customer_id=some_id;
//锁定之后这里是不会再有其它线程操作数据库,mysql处理操作是以线程为基本处理单位的
UPDATE customer;
SET total_value=sum_from_previous_statement WHERE customer_id=some_id; UNLOCK TABLES;

锁定表可以加快插入、更新或删除的速度,保证数据在做一系列动作时不被打扰,但又只限定在单用户上,别人不能对他锁定的表进行操作

[[i] 本帖最后由 极品黑公子 于 2007-12-4 10:41 编辑 [/i]]

离群的猴子 2007-12-4 12:31

不错支持你一下。:lol
页: [1]
查看完整版本: 锁定