-Cross- Опубликовано 25 Января 2008 Жалоба Поделиться Опубликовано 25 Января 2008 Как сделать запрос на изменение префиксов таблиц?Скажем у меня xx_ а я хочу yyyyy_А то каждую таблицу в ручную редактировать - это самоубийство... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 никак. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 теоретически можно: чранимой процедурой в цикле по результату show tables Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 Ты уверен? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 Нет, поэтому и сказал теоретически. Сегодня проверю, но проблем не должно быть, кроме прав, не помню, можно ли из процедур alter table делать и show tables выполнять Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 Проверь-проверь. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 взять phpMyAdmin и по одной менять имена таблицтам вроде можно Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 26 Января 2008 Жалоба Поделиться Опубликовано 26 Января 2008 Или написать маленький скриптик, который будет генерить все нужные запросы Можно и просто в редакторе заменой сделать такой список из списка таблиц. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 27 Января 2008 Жалоба Поделиться Опубликовано 27 Января 2008 А в чем пробелма-то? ALTER TABLE старое-имя-таблицы RENAME новое-имя-таблицы делаеш скриптик он переименовывает нужные тебе таблицы да и всея точно сейчас ен помню но можно регуляркой выбрку таблиц описать тогда и одним запросом получится переименовку провернуть Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 27 Января 2008 Жалоба Поделиться Опубликовано 27 Января 2008 xRay, для всех таблиц заменить префикс. Их там порядка сотни, товарисчу лень Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 27 Января 2008 Жалоба Поделиться Опубликовано 27 Января 2008 Да, к сожалению MySql не позволяет использовать в Rename Table в качестве параметров пользовательские переменные create procedure renpref ()begindeclare str varchar (50);declare strnew varchar (50);declare is_end INT Default 0;declare curtab cursor for show tables;declare continue handler for not found set is_end=1;open curtab;wet: LOOPfetch curtab into str;if is_end then LEAVE wet;END IF;set strnew = insert(str,1,instr(str,'_'),'tst_');Rename table @str to @strnew;END LOOP wet;CLOSE curtab;end; а жаль ( Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
katta Опубликовано 27 Января 2008 Жалоба Поделиться Опубликовано 27 Января 2008 Только PHP-скриптом. Берем в цикле имена таблиц, выкидываем префикс, добавляем новый и альтерим табличку. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 28 Января 2008 Жалоба Поделиться Опубликовано 28 Января 2008 Да, к сожалению MySql не позволяет использовать в Rename Table в качестве параметров пользовательские переменныеой ну надо же Можно в 5-ом мускуле заселектив из специальной базы. Она называется information_schemaПошли вслед за Ораклом. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 28 Января 2008 Жалоба Поделиться Опубликовано 28 Января 2008 Да с схемой то изначально было понятно, это бы я сделал, только не выход ) далеко не у всех права есть такие ) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Вобщем все- таки я был прав.Вот решение: create procedure renpref (newpref varchar(4)) begin declare str varchar (50); declare strnew varchar (50); declare is_end INT Default 0; declare curtab cursor for show tables; declare continue handler for not found set is_end=1; open curtab; wet: LOOP fetch curtab into str; if is_end then LEAVE wet; END IF; set strnew = insert(str,1,instr(str,'_'),newpref); call rentable(str,strnew); END LOOP wet; CLOSE curtab; end; create procedure rentable (old_name varchar(50),new_name varchar(50)) begin set @renq = concat('Rename table ',old_name,' to ',new_name); prepare execq from @renq; execute execq; end; вызов call renpref('pref');гдеpref: новый префикс таблица (3 символа) и завершающий знак подчеркивания.пример:call renpref('tst_'); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Если не сложно, перепишите для произвольного префикса, не обяз. с подчёркиванием Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Гы, дык этому решению требуется MySQL 5.x Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Само собой, но речь о вресии выше не шла =) Если не сложно, перепишите для произвольного префикса, не обяз. с подчёркиваниемНе получится без подчеркивания, в противном случае как отделять префикс от названия таблицы ? ) Хотя можно конечно в параметрах передавать: старый префикс, новый префикс, тогда будет работать. Ок, сделаю Вот:Создать две хранимых процедуры: create procedure renpref (oldpref varchar(10),newpref varchar(10)) begin declare str varchar (50); declare strnew varchar (50); declare is_end INT Default 0; declare curtab cursor for show tables; declare continue handler for not found set is_end=1; open curtab; wet: LOOP fetch curtab into str; if is_end then LEAVE wet; END IF; set strnew = insert(str,1,length(oldpref),newpref); call rentable(str,strnew); END LOOP wet; CLOSE curtab; end; create procedure rentable (old_name varchar(50),new_name varchar(50)) begin set @renq = concat('Rename table ',old_name,' to ',new_name); prepare execq from @renq; execute execq; end; Использовать:call renpref ('ваш старый префикс','ваш новый префикс');префиксы могут быть любыми. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Само собой, но речь о вресии выше не шла =)ну дык в 5-ом можно и без такого гемора, я уже выше писал как. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Хм, только твой способ несколько непонятен: information_schema апдейтить нельзя. Тогда какой смысл?получить список таблиц из триггера мы и так можем, show tables из триггера ничего не мешает вызвать, вопрос то был именно в переименовании, а через information_schema переименовать нельзя. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Самое главное что можно заселектить Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Так вроде с выбором имен таблиц прблем то и не было ) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 А как? Давай сбацай ещё раз p.s.: select'ом! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Kvendi Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 Всмысле select-ом ?ничо не понял ) чем show tables-то не нравится ? ) или ты говоришь чтобы реализовать без store proc ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 7 Февраля 2008 Жалоба Поделиться Опубликовано 7 Февраля 2008 show tables не катит. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.