Поиск простой способ изменить несколько таблиц за один раз в MySQL - PullRequest
4 голосов
/ 15 июля 2010

У меня есть много таблиц, которые начинаются с какого-то префикса,

, и я хочу изменить эти таблицы

каков простой способ сделать это (вместо этого запустить по всем таблицам)

я имею в виду что-то вроде:

ALTER TABLE  LIKE tablenameprefix% ADD INDEX `NewIndex1` (`field`);

как я могу это сделать?

спасибо

РЕДАКТИРОВАТЬ:

Могу ли я сделать вид цикла не в хранимой процедуре?выберите имена таблиц из

SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE 'tableprefix%'

Ответы [ 5 ]

3 голосов
/ 15 июля 2010

Вы не можете.Однако вы можете написать хранимую процедуру, которая перечисляет все таблицы, которые ищут ваш префикс, и выполняет необходимые изменения.

2 голосов
/ 11 октября 2011

Когда я хотел изменить движок нескольких таблиц с MyISAM на InnoDB, вместо того, чтобы писать цикл, я просто сделал полный дамп БД и открыл его в текстовом редакторе. В текстовом редакторе я просто изменил все слова MyISAM на InnoDB.

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

2 голосов
/ 15 июля 2010

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

ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification]

Ссылка: http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

1 голос
/ 15 июля 2010

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

0 голосов
/ 23 мая 2017

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

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

Вот что я сделал:

SELECT CONCAT('ALTER TABLE olddb.', table_name, ' RENAME wordpress.', table_name, ';')
  FROM information_schema.tables
  WHERE table_schema='olddb' AND table_name LIKE 'wp%'
  INTO OUTFILE '/tmp/move_to_wordpress';
SOURCE /tmp/move_to_wordpress;

Вот и все.

...