Mysqlストレージ・プロシージャとトリガ


2日前、同僚のログモジュールイベントのバックアップでメモリオーバーフローエラーが発生し、ちょうど研究する時間がありました.ログのバックアップ時にすべてのレコードをクエリーし、ファイルに書きました.(実用的な観点から、データベースのバックアップには多くの有効な方法がありますが、真理を尊重するように需要を尊重するのが良いエンジニアであることを軽蔑しないでください.
Mysqlトリガ:
テーブルを挿入、更新、削除する前に、ユーザーを追加するときにログ・テーブルに挿入されたログを記録するなど、データベースに対していくつかの操作を行います.
Mysqlストアド・プロシージャ:
ストレージプロセスは複雑なSQL文で、関数の形式に包装することができて、後のコードの中でこの関数をコールバックすればいいだけで、ページング、データバックアップなどを実現することができます.
ここはただの簡単なメモで、関連資料はネット上にたくさんあるので、使いながら調べることをお勧めします.

select * into outfile "d:\\Windows.txt" from t_windows;


LOAD DATA INFILE "d:\\Windows.txt" INTO TABLE t_windows;

完全なページング・ストレージ・プロシージャ:

CREATE PROCEDURE p_pageList (
  m_pageNo int , //
  m_perPageCnt int , //
  m_column varchar(1000) , //
  m_table varchar(1000) , //
  m_condition varchar(1000), //
  m_orderBy varchar(200) , //
  out m_totalPageCnt int //
  )
  BEGIN
  SET @pageCnt = 1; //
  SET @limitStart = (m_pageNo - 1)*m_perPageCnt; //
  SET @limitEnd = m_perPageCnt; //
  SET @sqlCnt = CONCAT('select count(1) into @pageCnt from ',m_table); // concat , ,
  SET @sql = CONCAT('select ',m_column,' from ',m_table); //

  IF m_condition IS NOT NULL AND m_condition <> '' THEN
  SET @sql = CONCAT(@sql,' where ',m_condition);
  SET @sqlCnt = CONCAT(@sqlCnt,' where ',m_condition);
  END IF;

  IF m_orderBy IS NOT NULL AND m_orderBy <> '' THEN
   SET @sql = CONCAT(@sql,' order by ',m_orderBy);
  END IF;

  SET @sql = CONCAT(@sql, ' limit ', @limitStart, ',', @limitEnd); //

  PREPARE s_cnt from @sqlCnt; //
  EXECUTE s_cnt; //
  DEALLOCATE PREPARE s_cnt; //

  SET m_totalPageCnt = @pageCnt; //

  PREPARE record from @sql;
  EXECUTE record;
  DEALLOCATE PREPARE record;

  END

一人一人のニーズが違うので、コピーして使えばいいとは期待しないで、フォーマットに倣って自分で多調式の調式をします.