Переименуйте префикс таблицы, используя подстановочные знаки - PullRequest
3 голосов
/ 15 января 2011

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

rename table 'wp_%' to 'wp_13_%'

Но это не похоже на работу. Я хотел бы внести свой вклад в то, что я могу делать неправильно.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 15 января 2011

Поскольку mysql не использует подстановочные знаки, такие как% в таблице переименования, почему бы вам не экспортировать базу данных, выполните глобальный поиск в вашем любимом текстовом редакторе wp_ и замените его на wp_13 _?

Затем вы можете импортировать его заново.

Это должно сделать это.

1 голос
/ 15 января 2011

Синтаксис переименования mysql не поддерживает символы подстановки, такие как%, который вы использовали. Вы все еще можете переименовать несколько таблиц в одной команде.

например. если у вас есть таблица wp_A, wp_B вы можете переименовать в wp_13_A, wp_13_B

RENAME TABLE 'wp_A' TO 'wp_13_A', 'wp_B' TO 'wp_13_B'
1 голос
/ 15 января 2011

Я знаю, что вы используете MySQL, хотя у меня что-то подобное написано для SQL Server (с использованием T-SQL.) Это похоже на использование бульдозера для открытия двери, но это работает.Возможно, вы могли бы использовать его в качестве основы для запроса MySQL ... определенно не для немедленного использования ответа, а для чего-то, что вы могли бы основывать на логике хранимой процедуры, если хотите.

DECLARE @FrontWord nvarchar(20)
DECLARE @NewFrontWord nvarchar(20)

SET @FrontWord = 'wp_'
SET @NewFrontWord = 'wp_13_'

DECLARE MY_CURSOR Cursor
FOR (
    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE = 'BASE TABLE'
    AND TABLE_NAME LIKE @FrontWord + '%'
)

Open MY_CURSOR

DECLARE @tablename nvarchar(20)
DECLARE @lastpart nvarchar(20)
DECLARE @newtablename nvarchar(20)

Fetch NEXT FROM MY_Cursor INTO @tablename

    While (@@FETCH_STATUS <> -1)
    BEGIN
        IF (@@FETCH_STATUS <> -2)
        SET @lastpart = RIGHT(@tablename, LEN(@tablename) - LEN(@FrontWord))
        SET @newtablename = @NewFrontWord + @lastpart;
        PRINT @newtablename

        EXEC sp_rename @tablename, @newtablename

FETCH NEXT FROM MY_CURSOR INTO @tablename
END 

CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
0 голосов
/ 16 января 2011

Вы можете сгенерировать необходимый код DDL с помощью sql. Не красиво, но мощно:)

Просто скопируйте и вставьте результат.

set session sql_mode='PIPES_AS_CONCAT';

select 'alter table ' 
     || table_name 
     || ' rename to wp_13_' 
     || substr(table_name, 4) 
     || ';' as ddl
  from information_schema.tables 
 where table_schema = 'BLOG';


+-----------------------------------------------------------------------+
| ddl                                                                   |
+-----------------------------------------------------------------------+
| alter table wp_commentmeta rename to wp_13_commentmeta;               |
| alter table wp_comments rename to wp_13_comments;                     |
| alter table wp_links rename to wp_13_links;                           |
| alter table wp_options rename to wp_13_options;                       |
| alter table wp_postmeta rename to wp_13_postmeta;                     |
| alter table wp_posts rename to wp_13_posts;                           |
| alter table wp_term_relationships rename to wp_13_term_relationships; |
| alter table wp_term_taxonomy rename to wp_13_term_taxonomy;           |
| alter table wp_terms rename to wp_13_terms;                           |
| alter table wp_usermeta rename to wp_13_usermeta;                     |
| alter table wp_users rename to wp_13_users;                           |
+-----------------------------------------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...