本文目录一览:
- 1、谁能举个thinkphp3.2.2数据库事务例子
- 2、php中mysql加锁问题
- 3、请问在php中如何控制多表事务?
- 4、php mysql的锁机制 怎么写
- 5、PHP简单分布式锁-PHP中的锁
- 6、PHP MYSQL中 表锁和行锁 一般什么情况下使用 另外具体怎么写
谁能举个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。