Difference between revisions of "Renaming MySQL tables and databases"
m (→Renaming tables) |
(final command) |
||
Line 5: | Line 5: | ||
First log in to MySQL and create a new empty database for the target name | First log in to MySQL and create a new empty database for the target name | ||
− | {{code|< | + | {{code|<mysql>CREATE DATABASE DB_B;</mysql>}} |
Line 15: | Line 15: | ||
== Renaming tables == | == Renaming tables == | ||
Renaming one or two tables is simple, just log in to SQL and use the following syntax: | Renaming one or two tables is simple, just log in to SQL and use the following syntax: | ||
− | {{code|< | + | {{code|<mysql>RENAME TABLE tbl_from_1 TO tbl_to_1, tbl_from_2 TO tbl_to_2;</mysql>}} |
Line 75: | Line 75: | ||
foo_logging TO bar_logging | foo_logging TO bar_logging | ||
foo_module_deps TO bar_module_deps</pre>}} | foo_module_deps TO bar_module_deps</pre>}} | ||
+ | |||
+ | |||
+ | Then it's a simple matter to replace the newline characters (\n) with commas (,) and prepend the whole thing with RENAME TABLE. Make sure you have a semicolon (;) and no comma on the end of the list. | ||
+ | {{code|<mysql>RENAME TABLE foo_archive TO bar_archive,foo_category TO bar_category,foo_categorylinks TO bar_categorylinks, | ||
+ | foo_change_tag TO bar_change_tag,foo_external_user TO bar_external_user,foo_externallinks TO bar_externallinks, | ||
+ | foo_filearchive TO bar_filearchive,foo_hitcounter TO bar_hitcounter,foo_image TO bar_image,foo_imagelinks TO bar_imagelinks, | ||
+ | foo_interwiki TO bar_interwiki,foo_ipblocks TO bar_ipblocks,foo_iwlinks TO bar_iwlinks,foo_job TO bar_job, | ||
+ | foo_l10n_cache TO bar_l10n_cache,foo_langlinks TO bar_langlinks,foo_log_search TO bar_log_search,foo_logging TO bar_logging, | ||
+ | foo_module_deps TO bar_module_deps;</mysql>}} | ||
+ | |||
+ | |||
+ | You can then paste this whole command into the MySQL console to do the renaming in one go. |
Revision as of 22:29, 4 October 2012
Renaming MySQL tables and databases Organic Design procedure |
Duplicating a database
This example duplicates a database called "DB_A" to "DB_B", to rename you'd also drop the original database after successfully duplicating it.
First log in to MySQL and create a new empty database for the target name
Then quit from MySQL and export the source database to a temporary file, and import it into the new database. I prefer to do this as two separate commands so that we can use interactive passwords and avoid them being written to history.
Renaming tables
Renaming one or two tables is simple, just log in to SQL and use the following syntax:
But usually we need to rename forty or fifty tables because we're usually changing the table-prefix of all the tables in an application like MediaWiki or Wordpress. To do this we can output the list of tables we want to change with SHOW TABLES, and then use a text editor (one that has regular expressions like Geany) to reformat the list into a RENAME TABLE command that we'll paste back into the MySQL command line. First log in to MySQL, select the database containing the tables and list them as follows (in this example we're going to change a prefix from foo_ to bar_.
Then select and copy the table list and paste into your text editor, you should have something like the following (I've omitted most tables to save space).
Then you can use the following regular expression to convert the list into the appropriate format.
The search expression is:
and the replacement expression is:
Now you should have the following text in the editor:
Then it's a simple matter to replace the newline characters (\n) with commas (,) and prepend the whole thing with RENAME TABLE. Make sure you have a semicolon (;) and no comma on the end of the list.
You can then paste this whole command into the MySQL console to do the renaming in one go.