Drop multiple databases with names matching a pattern

后端 未结 10 2122
南旧
南旧 2021-02-02 10:39

I want to drop all the databases starting with a word.

abc
xyz
cms_db1
cms_db2
cms_xyz
pqr

In the example given above, I will like to drop all

10条回答
  •  南笙
    南笙 (楼主)
    2021-02-02 10:47

    If you wish to stay completely within MySQL/MariaDB (i.e. without using bash scripts and such) you can do the following:

    DELIMITER //
    CREATE PROCEDURE clean()
    BEGIN
        SET @query := (SELECT CONCAT('DROP DATABASE ', SCHEMA_NAME, ';') FROM `information_schema`.`SCHEMATA` WHERE SCHEMA_NAME LIKE 'dbtVDB%' LIMIT 1);
        WHILE @query != '' DO
            PREPARE stmt FROM @query;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
            SET @query := (SELECT CONCAT('DROP DATABASE ', SCHEMA_NAME, ';') FROM `information_schema`.`SCHEMATA` WHERE SCHEMA_NAME LIKE 'cms%' LIMIT 1);
        END WHILE;
        DELETE FROM mysql.db WHERE mysql.db.Db LIKE 'cms%';
    END;
    //
    DELIMITER ;
    CALL clean();
    DROP PROCEDURE clean;
    

提交回复
热议问题