本文实例讲述了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程序设计有所帮助。