MYSQL利用存儲過程清理所有表邏輯刪除數據

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章