sql >> データベース >  >> RDS >> Mysql

MySQLデータベースからすべてのテーブルを切り捨てるにはどうすればよいですか?

    わかりました。自分で解決しました。ここにストアドプロシージャがあります:)

    BEGIN
        DECLARE done BOOLEAN DEFAULT FALSE; 
        DECLARE truncatestmnt TEXT; -- this is where the truncate statement will be retrieved from cursor
    
        -- This is the magic query that will bring all the table names from the database
        DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; 
    
        OPEN c1;
    
        c1_loop: LOOP
        FETCH c1 INTO truncatestmnt;
        IF `done` THEN LEAVE c1_loop; END IF;
            SET @x = truncatestmnt;
            PREPARE stm1 FROM @x;
            EXECUTE stm1;
        END LOOP c1_loop; 
    
        CLOSE c1;
    END
    

    指定されたデータベースからすべてのテーブルを呼び出すようにしています。これは、指定されたデータベース内のテーブルに従うパターンがない場合に役立ちます。

    したがって、DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";を呼び出すことによって 結果をカーソルに保存すると、すべてのTRUNCATE TABLE xをフェッチできます。 指定されたデータベース内の「n」個のテーブルによって生成されたステートメント。カーソル内の各ステートメントを準備して実行するだけで、指定されたデータベース内のすべてのテーブルが切り捨てられます。

    これが他の誰かにも役立つことを願っています:)

    アレックス



    1. UTF8エンコーディングの問題-良い例を挙げて

    2. MySQLデータベースの使い方を学ぶ

    3. 更新中のOracleの日付の破損

    4. このOracleDROPCOLUMNが別の列のデフォルト値を変更するのはなぜですか?