типы - как удалить базу данных в mysql




Как удалить имя префикса из каждого имени таблицы в базе данных mysql (2)

Вы можете сгенерировать необходимые операторы одним запросом:

select 'RENAME TABLE ' || table_name ||  ' TO ' || substr(table_name, 5) ||';'
from information_schema.tables

Сохраните вывод этого запроса в файл, и у вас есть все необходимые вам утверждения.

Или если это возвращает 0 с и 1 с скорее statemenets, вот версия с использованием concat :

select concat('RENAME TABLE ', concat(table_name, concat(' TO ', concat(substr(table_name, 5), ';'))))
from information_schema.tables;

У меня есть база данных mysql joomla с префиксом имени таблицы «jos_» для всех моих имен таблиц. Но я хотел бы удалить его из всех моих таблиц. Я понимаю, как переименовывать каждую таблицу, по одному, но у меня 600 таблиц. Есть ли простой в использовании SQL-запрос для этого.

Если у кого-то есть решение, можете ли вы отправить точный sql-запрос, который я могу использовать?


Вы можете создать свою собственную хранимую процедуру, чтобы переименовать свои таблицы, при этом вам не нужно открывать внешний редактор, все будет сделано на сервере:

delimiter //
CREATE PROCEDURE rename_tables( IN db CHAR(255), IN srch CHAR(255), IN rplc CHAR(255) )
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE from_table CHAR(255);
  DECLARE cur1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=db;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur1;

  read_loop: LOOP
    IF done THEN
      LEAVE read_loop;
    END IF;

    FETCH cur1 INTO from_table;
    SET @to_table = REPLACE(from_table, srch, rplc);

    IF from_table != @to_table THEN
      SET @rename_query = CONCAT('RENAME TABLE ', db, '.', from_table, ' TO ', @to_table, ';');

      PREPARE stmt FROM @rename_query;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
    END IF;

  END LOOP;

  CLOSE cur1;
END//
delimiter ;

Применение:

CALL rename_tables('test', 'jos_', '');

Обновление: это была моя первая хранимая процедура MySQL, и я столкнулся с 6- летней ошибкой # 5967, которая была довольно раздражающей, ваши имена переменных должны отличаться от имен полей, потому что если они не будут, вы получите значения NULL в своем переменные.

Поэтому имейте в виду, что если вы решите написать хранимую процедуру MySQL.







phpmyadmin