SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.08.2011 16:11:22

Mlin
Участник
Зарегистрирован: 11.08.2011
Сообщений: 2

Пожалуйста помогите с Replace

Здравствуйте, уважаемые!
очень нужна ваша помощь, есть БД wordpress'a , там почти во всех таблицах часто повторяется одно и тоже слово (значение) - site111.ru , и нужно сформировать запрос на изменение этого значения во всей БД, - на site111.org (переезжаем)
возможно ли такое сделать одним запросом, и каков запрос, подскажите пожалуйста.
Заранее спасибо!

Неактивен

 

#2 11.08.2011 16:54:51

megamanx
Участник
Зарегистрирован: 09.08.2011
Сообщений: 20

Re: Пожалуйста помогите с Replace

сначала находишь названия всех таблиц в БД запросом к information_schema
> select table_name from information_schema.tables where table_schema='название схемы'
после этого находишь все поля каждой таблицы
> select table_name, column_name from information_schema.columns
where table_name in (select table_name from information_schema.tables where table_schema='название схемы') and table_schema='название схемы'
Получая имя таблицы и поле, делаешь динамический запрос через PREPARE и EXECUTE на сравнение с указанным значением. В один запрос не получится, получится в одну хранимую процедуру. seealso http://habrahabr.ru/blogs/mysql/52983/

Неактивен

 

#3 11.08.2011 19:17:58

Mlin
Участник
Зарегистрирован: 11.08.2011
Сообщений: 2

Re: Пожалуйста помогите с Replace

огромное спасибо!)

Неактивен

 

#4 11.08.2011 21:58:01

megamanx
Участник
Зарегистрирован: 09.08.2011
Сообщений: 20

Re: Пожалуйста помогите с Replace

delimiter $$
drop procedure if exists check_all$$
create procedure check_all(in schemaname varchar(255))
begin
DECLARE done INT DEFAULT 0;
declare tabname varchar(255);
declare colname varchar(255);
declare template varchar(600);
declare c1 cursor for select table_name, column_name
                      from information_schema.columns
                      where table_name in (select table_name
                      from information_schema.tables
                      where table_schema=schemaname) and data_type='char' and table_schema=schemaname;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;                      
    open c1;
    repeat
      fetch c1 into tabname, colname;
      #prepare statement
      set @template := concat('update ',tabname,' set ',colname,'=''lol!!!'' where ',colname,'=''1003LL'' ');
      prepare template from @template;
      execute template;
      deallocate prepare template;
    until done end repeat;
    close c1;
end$$

Неактивен

 

#5 11.08.2011 21:59:12

megamanx
Участник
Зарегистрирован: 09.08.2011
Сообщений: 20

Re: Пожалуйста помогите с Replace

Здесь важное дополнение - тип колонки char. Тестировал на себе - работает;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson