事务是针对数据库本身的操作
Thinkphp3.2 事务分为两中情况:
=========
应用逻辑
启动事务:
$user->startTrans();
提交事务:
$user->commit();
事务回滚:
$user->rollback();
1.对象类型
// 在User模型中启动事务
$User->startTrans()
// 进行相关的业务逻辑操作
$Info = M("Info"); // 实例化Info对象
$Info->save($User); // 保存用户信息
if (操作成功)$User->commit();
else$User->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 //放弃执行事务