2016-01-30 2 views
1

* Я хочу, чтобы удалить префикс из всех имен таблиц в MySQLУдалить префикс из всех имен MySQL таблицы базы данных

У меня есть тест базы данных с более чем 100 таблицами, поэтому я не хочу идти через ручной процесс или переименование каждой таблицы.

например ci_categories ci_products

ожидается выход: категории изделия

я хочу, чтобы удалить префикс из всех таблицы, то есть CI_

Есть ли запрос MySQL для этого?

Благодаря Amit

+1

Возможный дубликат [Как я могу изменить префиксы во всех таблицах в моей БД MySQL?] (HTTP: //stackoverflow.com/questions/2466101/how-i-can-change-prefixes-in-all-tables-in-my-mysql-db) –

+0

Имеет ли в каждой таблице префикс ** ci _ **? – 1000111

+0

да, каждый стол имеет префикс ci_. –

ответ

1

Я написал хранимую процедуру MySQL, чтобы изменить имена таблиц, так как нет никакого другого прямым способа изменить все имена таблиц с помощью одного запроса.

delimiter // 
CREATE PROCEDURE `ChangeTableNameProcedure`() 
BEGIN 

    DECLARE int_val INT DEFAULT 0; 
    DECLARE my_outer_cursor_done INT DEFAULT FALSE; 
    DECLARE my_oldTable VARCHAR(100); 
    DECLARE my_newTable VARCHAR(100); 

    DECLARE tableNameCursor CURSOR FOR SELECT TABLE_NAME oldName, 
    CONCAT(SUBSTRING(TABLE_NAME,POSITION('ci_' IN TABLE_NAME) + 3)) newName 
    FROM information_schema.tables 
    WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' AND TABLE_NAME LIKE 'ci_%'; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_outer_cursor_done = TRUE; 



OPEN tableNameCursor; 
    OUTER_CURSOR_LOOP: LOOP 
      FETCH FROM tableNameCursor INTO my_oldTable,my_newTable; 

        IF my_outer_cursor_done THEN 
         CLOSE tableNameCursor; 
         LEAVE OUTER_CURSOR_LOOP; 
        END IF; 
        SET @old = my_oldTable; 
        SET @new = my_newTable; 
        SET @statement = CONCAT('RENAME TABLE ',@old,' TO ',@new); 

        PREPARE stmt FROM @statement; 
        EXECUTE stmt; 
        DEALLOCATE PREPARE stmt; 


        END LOOP OUTER_CURSOR_LOOP; 


    END// 

N: B:

  1. Я предположил, что все имена таблиц в базе данных имеет префикс CI_.
  2. Вы должны поместить свое имя базы данных в TABLE_SCHEMA = «YOUR_DATABASE_NAME».
  3. Обратите внимание, что + 3 обозначает новое имя таблицы, где первые три символов будет пропущены (если старое название таблицы «ci_old_table» тогда ваше новое имя таблицы будет «old_table». Обратите внимание, что «CI_» сначала три символа были пропущены в новом имени таблицы.)
  4. После создания процедуры вам нужно просто позвонить по ее названию. Синтаксис является Call ChangeTableNameProcedure();
  5. Пожалуйста, убедитесь, что при создании процедуры вы не обращая внимания // разделитель
+1

безупречный !! это сработало для меня. большое спасибо –

+1

Вы больше всего приветствуетесь.Глад, чтобы знать, что это сработало для вас. !! : D – 1000111

Смежные вопросы