本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法。分享给大家供大家参考,具体如下:
lock table 读锁定
如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作。
1
2
3
|
lock tables user read ;//读锁定表
unlock tables;//解锁
lock tables user read local ;//本地读锁定表,其他线程的 insert 未被阻塞, update 操作被阻塞
|
lock table 写锁定
如果一个线程在一个表上得到一个 write锁,那么只有拥有这个锁的线程可以从表中读取和写表。其它的线程被阻塞。
1
2
|
lock tables user write;//写锁定表
unlock tables;//解锁
|
Yii中的用法实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/**
* 当日单项内容状态
*/
public function getPointAready( $marke , $dayTime ){
$model = SysRun::model()->findByAttributes( array ( 'syr_marking' => $marke , 'syr_daytime' => $dayTime ));
if ( empty ( $model )){
//表写锁定
Yii::app()->db->createCommand()->setText( "lock tables {{sys_run}} WRITE" )->execute();
$model = new SysRun();
$model ->syr_marking = $marke ;
$model ->syr_daytime = $dayTime ;
$model ->syr_val = 0;
$model ->syr_subval = 0;
$model ->save();
//表解锁
Yii::app()->db->createCommand()->setText( "unlock tables" )->execute();
}
return $model ;
}
|
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。