MYSQLストレージ・プロシージャを使用してすべてのテーブルの論理削除データをクリーンアップ

7850 ワード

MYSQLストレージ・プロシージャを使用してすべてのテーブルの論理削除データをクリーンアップ
  • 各テーブルは、論理的に削除されたタグフィールドstatus
  • を統一する必要があることに注意する.
  • (メンテナンスされているデータベースが多くない場合は、イベントを隔てて手動で実行することができる)自動タイミングでストレージ・プロシージャを実行する必要がある場合、後期にタイミング・タスク・イベント
  • を追加することができる.
    CREATE DEFINER=`root`@`localhost` PROCEDURE `del_data`()
    BEGIN 
    		DECLARE strClear VARCHAR(255);
    		DECLARE done INT DEFAULT 0;
        #    
        DECLARE curOne CURSOR FOR select CONCAT(" DELETE FROM ",table_name," where `status` = '0'; ") from information_schema.tables where TABLE_SCHEMA = 'cloud_course';	
        #         ,          True
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        #    
        OPEN curOne;
    
        FETCH curOne INTO strClear;
        REPEAT
            FETCH curOne INTO strClear;
            #SELECT strClear;
    
            #    SQL  
            SET @mysql = strClear;
            PREPARE stmt from @mysql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
    
            UNTIL done = 1 END REPEAT;
    
        #    
        CLOSE curOne;
    END
    

    すべてのテーブルのデータをクリアし、オートインクリメントから1にリセット
  • ストレージ・プロシージャの作成
  • 	delimiter //
    CREATE PROCEDURE clean_data()  
    	BEGIN
        DECLARE strClear VARCHAR(256);
        DECLARE done INT DEFAULT 0;
        #    
        DECLARE curOne CURSOR FOR SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') as ClearTable FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'cloud_course';
        #         ,          True
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        #    
        OPEN curOne;
    
        FETCH curOne INTO strClear;
        REPEAT
            FETCH curOne INTO strClear;
            #SELECT strClear;
    
            #    SQL  
            SET @mysql = strClear;
            PREPARE stmt from @mysql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
    
            UNTIL done = 1 END REPEAT;
    
        #    
        CLOSE curOne;
    END