Yii+MYSQLロックによる同時データの重複防止方法
1601 ワード
この例では、Yii+MYSQLロックテーブルによる同時データの重複を防止する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
ロックテーブルリードロック
1つのスレッドが1つのテーブル上のreadロックを取得すると、そのスレッドと他のすべてのスレッドはテーブルからデータを読むしかなく、書き込み操作はできません.
ロックテーブル書き込みロック
1つのスレッドが1つのテーブルにwriteロックを取得すると、このロックを持つスレッドだけがテーブルからテーブルを読み取り、書き込みできます.他のスレッドがブロックされています.
Yiiにおける用法例
Yiiの関連内容についてもっと興味のある読者は、「Yiiフレームワーク入門及び常用テクニック総括」、「php優秀開発フレームワーク総括」、「smartyテンプレート入門基礎教程」、「php操作officeドキュメントテクニック総括(word,excel,access,pptを含む)」、「php対象プログラム設計入門教程」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
本稿では,Yiiフレームワークに基づくPHPプログラムの設計に役立つことを期待する.
ロックテーブルリードロック
1つのスレッドが1つのテーブル上のreadロックを取得すると、そのスレッドと他のすべてのスレッドはテーブルからデータを読むしかなく、書き込み操作はできません.
lock tables user read;//
unlock tables;//
lock tables user read local;// , insert ,update
ロックテーブル書き込みロック
1つのスレッドが1つのテーブルにwriteロックを取得すると、このロックを持つスレッドだけがテーブルからテーブルを読み取り、書き込みできます.他のスレッドがブロックされています.
lock tables user write;//
unlock tables;//
Yiiにおける用法例
/**
*
*/
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の関連内容についてもっと興味のある読者は、「Yiiフレームワーク入門及び常用テクニック総括」、「php優秀開発フレームワーク総括」、「smartyテンプレート入門基礎教程」、「php操作officeドキュメントテクニック総括(word,excel,access,pptを含む)」、「php対象プログラム設計入門教程」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
本稿では,Yiiフレームワークに基づくPHPプログラムの設計に役立つことを期待する.