首页 > 编程知识 正文

php事务锁机制,php 死锁

时间:2023-12-27 22:27:02 阅读:325362 作者:IMRB

本文目录一览:

谁能举个thinkphp3.2.2数据库事务例子

数据库的事物处理有个lock方法,Lock方法是用于数据库的锁机制,如果在查询或者执行操作的时候使用,就会自动在生成的SQL语句最后加上FORUPDATE;$User=D("User");$User-lock(true)-save($data);

php中mysql加锁问题

有表锁,行锁,页锁

页级:引擎 BDB。

表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行

行级:引擎 INNODB , 单独的一行记录加锁

1) 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

2) 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

3) 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

一般不在PHP中使用锁操作,因为如果锁了库,如果遇到错误没有及时的解锁,就会导致不能访问数据的情况。

可以使用MYSQL的事务,就是定义事务开始,然后有几个语句要执行,然后根据情况,如果有一个语句没有执行成功,可以回滚(取消这几个语句的执行),从而达到几个语句都执行成功或者都不执行的效果,在强事务型的应用中一般使用这个方式

你可以去后盾人平台看看,里面的东西不错

请问在php中如何控制多表事务?

php框架中多表事务操作实例,参考如下:

function makeAcquire($nUsers,$nAwards)

{

//更新数据库

$tranDb = new Model();

$tranDb-startTrans();

for($i = 0; $i sizeof($nUsers); $i++)

{

//更新表Acquire

$flagAc = $tranDb-table('Acquire')-add($acquire);

//更新表Users

$where = array('u_id'=$nUsers[$i]['u_id']);

$flagU = $tranDb-table('Users')-where($where)-setInc('u_man_count',1);

//更新表Award

$where = array('a_id'=$nAwards[$i]['a_id']);

$flagA = $tranDb-table('Award')-where($where)-setDec('a_count',1);

}

if($flagAc $flagU $flagA)

{

$tranDb-commit();

}

else

{

$tranDb-rollback();

}

}

php mysql的锁机制 怎么写

MYSQL中的锁:

语法 :

LOCK TABLE 表名1 READ|WRITE, 表名2 READ|WRITE .................. 【锁表】

UNLOCK TABLES 【释放表】

Read:读锁|共享锁 : 所有的客户端只能读这个表不能写这个表

Write:写锁|排它锁: 所有当前锁定客户端可以操作这个表,其他客户端只能阻塞

注意:在锁表的过程中只能操作被锁定的表,如果要操作其他表,必须把所有要操作的表都锁定起来!

PHP中的文件锁 (锁的是文件,不是表)

文件锁的文件与表有什么关系?:一点关系也没有,与令牌相似,谁拿到谁操作。所以表根本没锁。

测试时,有个文件就行,叫什么名无所谓

PHP简单分布式锁-PHP中的锁

对于PHP的锁,其实并没有什么太多的概念。抛弃一些第三方的依赖,看看有哪些可用的选择。

目前可以想到的就这么多,在该项目中我们采用文件锁,因为其它的两个需要装扩展。文件锁的逻辑就非常简单了

从网上摘抄了一个例子,使用的 eAccelerator 和 文件锁两种 传送门

使用方法

PHP MYSQL中 表锁和行锁 一般什么情况下使用 另外具体怎么写

手动加锁:

表级锁

lock tables tablename read;//共享锁

lock tables tablename write;//排它锁

unlock tables;//解锁

php直接query就行了。

除了MyIsam,谁还会无聊到显式加锁?

InnoDB直接跑事务默认会触发隐式锁,不需要自己lock和unlock。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。