2013-02-27 1 views
2

У меня есть сценарий для запуска в моей базе данных. Но проблема заключается в том, что этот сценарий предполагает, что на таблицах нет префикса, а все базы данных имеют префикс (позвоните ему prefix_).Как принять префикс таблицы для всего скрипта MySQL?

Есть ли команда или способ MySQL попытаться запустить

INSERT INTO prefix_mytable ... 

вместо

INSERT INTO mytable... 

для всех SQL запросов в сценарии (UPDATE, INSERT и DELETE)?

+1

Нет, ваш сценарий должен будет учитывать это. MySQL знает только имя таблицы, которое имеет (префикс) –

+0

Майкл, если мы можем использовать некоторую внутреннюю опцию в mysql, например ASSUME_GLOBAL_PREFIX, и мы устанавливаем ее как ** префикс _ **, это должно работать. Но есть ли вариант для этого? =/ – GarouDan

+0

Могу сказать, что в MySQL, с которым я когда-либо встречался в документации, такой опции нет. Я надеюсь, что кто-то докажет мне, что я ошибаюсь в ответах ниже, потому что я согласен, что это было бы полезно. Если вы сообщите нам, как вы запускаете скрипт, возможно, у кого-то будет предложение взлома мастера. –

ответ

2

В MySQL нет способа автоматически префиксных таблиц так, как вы описываете. @MichaelBerkowski правильно.

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

Вот пример:

mysql> CREATE DATABASE test; 
mysql> CREATE TABLE test.prefix_mytable (id INT PRIMARY KEY, x VARCHAR(20)); 
mysql> CREATE DATABASE test2; 
mysql> CREATE VIEW test2.mytable AS SELECT * FROM test.prefix_mytable; 

Теперь вы можете вставить с помощью префиксов имен:

mysql> INSERT INTO test2.mytable (id, x) VALUES (123, 'abc'); 

И проверить, что данные были вставлены в исходной таблице:

mysql> SELECT * FROM test.prefix_mytable; 

Как только вы это сделаете, вы можете запустить свой SQL-скрипт по базе данных test2 и все e INSERT должны правильно подходить к вашим оригинальным таблицам.

Если у вас есть много таблиц, которые необходимо создать представления для, вы можете автоматизировать создание CREATE заявления VIEW:

mysql> SELECT CONCAT('CREATE VIEW test2.', REPLACE(TABLE_NAME, 'prefix_', ''), 
    ' AS SELECT * FROM test.', TABLE_NAME, ';') AS _sql 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA='test' AND TABLE_NAME LIKE 'prefix\_%'; 
+1

Эффективный. Безумный, но эффективный. –

+0

@MichaelBerkowski, LOL! Благодаря! Каждая проблема разрешима - дело только в том, сколько обручей нужно проскочить. :-) –

+0

Интересное решение. Но это похоже на плохое ограничение MySQL, если у нас есть внутренний префикс var, это может быть очень просто. ^^ – GarouDan

0

Вот руководство, чтобы заменить префикс WordPress от wp_ к другому , например, вы можете обновить любую таблицу mysql. How to rename WordPress tables prefix?

+0

Пожалуйста, попробуйте прочитать это http://stackoverflow.com/help/deleted-answers, чтобы узнать больше о том, как ** не ** ответить.А именно: «Ответы, которые принципиально не отвечают на вопрос»: ** едва ли больше, чем ссылка на внешний сайт ** –