当在一个应用执行一些查询时, 每次读取 或 写入数据库中的信息, 确保数据库不是只执行了一部分查询, 这一点非常重要.
一个事务处理, 在 Yii 的代表是一个CDbTransaction 实例, may be initiated in this case:
开始事务处理.
逐个执行查询. 任何对数据库的更新对于外部都是不可见的.
提交(Commit)事务. 若事务成功执行, 对数据库的更改变得可见.
若其中一个查询失败, 整个事务被回滚(rolle back).
上面的流程可以使用下面的代码来执行:
$transaction = $connection->beginTransaction ( ) ;
try
{
$connection->createCommand( $sql1 ) ->execute ( ) ;
$connection->createCommand( $sql2 ) ->execute ( ) ;
//.... other SQL executions
$transaction ->commit( ) ;
}
catch ( Exception $e) // an exception is raised if a query fails
{
$transaction ->rollBack( ) ;
}
AR中使用方法:
每个 AR 实例都含有一个属性名叫 dbConnection ,是一个 CDbConnection 的实例,这样我们可以在需要时配合 AR 使用由 Yii DAO 提供的 事务 功能:
$model=Post::model();
$transaction=$model->dbConnection->beginTransaction();
try
{
// 查找和保存是可能由另一个请求干预的两个步骤
// 这样我们使用一个事务以确保其一致性和完整性
$post=$model->findByPk(10);
$post->title='new post title';
$post->save();
$transaction->commit();
}
catch(Exception $e)
{
$transaction->rollBack();
}
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.unfit.cn/archives/72.html