Thinkphp3.2 事务 mysql 事务 redis 事务 Yii 事务


事务是针对数据库本身的操作

#Thinkphp3.2 事务分为两中情况:

应用逻辑
	启动事务:
		$user->startTrans();
	提交事务:
		$user->commit();
	事务回滚:
		$user->rollback();

#1.对象类型
// 在User模型中启动事务
$User->startTrans()
// 进行相关的业务逻辑操作
$Info = M(“Info”); // 实例化Info对象
I n f o − > s a v e ( Info->save( Info>save(User); // 保存用户信息
if (操作成功) U s e r − > c o m m i t ( ) ; e l s e User->commit(); else User>commit();elseUser->rollback()

#2.过程类型
M()->startTrans();//开启事务
if(){
M()->commit();//执行
}else{
M()->rollback();//事务回滚
}


#mysql 事务:
菜鸟mysql 事务讲解: http://www.runoob.com/mysql/mysql-transaction.html

#1.mysqli
	$dbhost = 'localhost:3306';  // mysql服务器主机地址
	$dbuser = 'root';            // mysql用户名
	$dbpass = '123456';          // mysql用户名密码
	$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
	mysqli_query($conn, "set names utf8");
	mysqli_select_db( $conn, 'RUNOOB' );
	mysqli_query($conn, "SET AUTOCOMMIT=0");
	//设置为不自动提交,因为MYSQL默认立即执行
	
	mysqli_begin_stransaction($con);
	执行sql 语句
	mysqli_commit($con);
	mysqli_close($con);
	
#2.PDO
	$dp = 'mysql:host=127.0.0,1;dbname=test';
	try{
		$this->_pdo = new PDO($dp,'root','123');
	}catch(PDOException $e){
		echo '数据链接失败'.$e->getMessage();
		exit;
	}
	开启事务
	ty{
		$_pdo->beginTransaction();
		$sql_forlock = 'select * from goods where id = '.$gid .' limit 1 for update';//数据库锁表 innodb
		$result		= $pdo->query($sql_forlock,PDO::FETCH_ASSOC);
		$goodsInfo	= $result->fetch();
		如果没有成功
		$_pdo->rollback();
		如果成功
		$_pdo->commit();
	}catch(PDOException $e){
		echo $e->getMessage();
		$pdo->rollBack();
	}

#redis 事务
单个redis命令的执行是原子性的,但redis 没有在事务上增加任何维持原子性的机制,
所以redis事务的执行并不是原子性的,redis事务可以理解为一个打包的批量执行脚本,
中间某条命令的失败会导致前面已做指令的回滚,也不可造成后续的指令不做。

	multi //开启事务
	set name spicy
	set js  gs
	exec     //执行
	discard  //放弃执行事务

Yii 事务

$db = Yii::$app->db;
$transaction = $db->beginTransaction();
try {
    $db->createCommand($sql1)->execute();
    $db->createCommand($sql2)->execute();
    // ... executing other SQL statements ...
    
    $transaction->commit();
} catch(\Exception $e) {
    $transaction->rollBack();
    throw $e;
} catch(\Throwable $e) {
    $transaction->rollBack();
    throw $e;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spicy姜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值