Как удалить несколько баз данных на основе строки префикса - PullRequest
1 голос
/ 21 сентября 2010

пример_ или e_

Я хочу удалить все базы данных, которые соответствуют префиксу e_, так что e_database1, e_database2 и т. Д. Будут удалены.

Команды, которые не работают:

mysql drop database e_% База данных mysql drop _ _ 1008 *

Я ищу не все таблицы в данной базе данных, а все базы данных на данном сервере MySQL.

1 Ответ

0 голосов
/ 22 ноября 2013

Вы можете сделать это с помощью сохраненного процесса, например:

/* Start stored proc */
DELIMITER //

DROP PROCEDURE IF EXISTS db_clean_up //
CREATE PROCEDURE db_clean_up
(
)
BEGIN
declare done bit default false;
  declare deleted varchar(255);

-- Drop DBs
DECLARE cur1 CURSOR FOR SELECT 
    SCHEMA_NAME 
FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME LIKE 'db_prefix%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;

  createLoop: LOOP
    FETCH cur1 INTO deleted;

    IF done THEN
      LEAVE createLoop;
    END IF;

SET @query = CONCAT('DROP DATABASE `', deleted, '`;');

PREPARE stmt1 FROM @query;

EXECUTE stmt1;

END LOOP createLoop;

CLOSE cur1;

END //

delimiter ;

/* End stored proc */
...