SQLストアド・プロシージャ(MySQL)

6699 ワード

ストレージプロセスの原理
一般的にSQL文を作成する際に複数のテーブルにデータが追加される場合、ID列などの外部リンクとしてプライマリ・テーブルに情報を追加するプライマリ・キーがMySQLで自動的に生成される場合は、2回のselectを定義して追加することはできません.
ただし、SQL文はコンパイルして実行する必要があります.ストアド・プロシージャは、特定の機能を完了するためのSQL文セットです.
ストレージ・プロシージャの特徴
  • は、ストレージ・プロシージャの名前を指定し、特定のパラメータ(ストレージ・プロシージャにパラメータがある場合)を指定することによって実行を呼び出す.
  • ストレージ・プロシージャはプログラム可能な関数であり、データベースに作成され保存され、SQL文と制御構造から構成されます.

  • ストレージ・プロシージャの利点
  • SQL文の機能と柔軟性を強化し、複雑な判断と演算を伴うSQL文を作成します.
  • ストアド・プロシージャが作成されると、ストアド・プロシージャのSQL文を再記述することなく、プログラム内で複数回呼び出すことができます.
  • ストレージ・プロシージャはプリコンパイルされているため、あるオペレーションが複数回実行される場合、ストレージ・プロシージャはバッチに対して比較的効率的に実行される.
  • ネットワーク伝送では、ストレージプロセスが事前に定義され、ネットワーク伝送は単純な文にすぎず、伝送負荷を大幅に軽減した.
  • ストレージ・プロシージャは、比較的高いセキュリティを有する権限制限を行うことができる.

  • 構文
    ストアド・プロシージャの作成
    //IN                ,                  ,    
    //OUT:             ,    
    //INOUT:     ,         
    CREATE PROCEDURE      ( in/out/inout        )
    BEGIN
    .........
    END
    

    変数の定義
    SET @    =    
    

    if判断
    IF      THEN
    

    よびだし
    call test(  );
    

    ストアド・プロシージャの作成(インスタンス)
    #      
    DELIMITER //
    
    #        
    #(    )      
    #  :DROP PROCEDURE IF EXISTS     .     ;
    DROP PROCEDURE IF EXISTS mysql.addtest;
    
    #      
    #  :CREATE PROCEDURE      (in        )
    CREATE PROCEDURE addtest(IN testOne INT,IN testTwo VARCHAR(20))
    
    	#  
    	BEGIN
    
    	#    
    	DECLARE test VARCHAR(10);
    
    	#SET @        //                    
    	SET @exec = (select `id` from `test` where `testid` = 1);
    
    	#IF      THEN  //    
    	IF @exec=0 THEN
    
    		#         SQL    
    		INSERT INTO `test1`(`testvalue`) VALUES(@exec);
    
    		#@@identity:      SQL            ID
    		SET @upid = @@identity;
    
    	ELSE
    	......
    	END IF;
    
    #    
    END //
    DELIMITER ;
    
    #      
    call addtest(1,'  ');