Yii+MYSQLロックによる同時データの重複防止方法

1601 ワード

この例では、Yii+MYSQLロックテーブルによる同時データの重複を防止する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
ロックテーブルリードロック
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プログラムの設計に役立つことを期待する.