Search the MySQL manual:
MySQL Manual

Buy this Reference Manual in softcover from Barnes & Noble!

/ Next / Up / Table of Contents

6.5.5 Синтаксис оператора RENAME TABLE

RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2,...]

Операция переименования должна осуществляться как атомарная, т.е. при выполнении переименования никакому другому потоку не разрешается доступ к указанным таблицам. Благодаря этому возможно замещение таблицы пустой таблицей:

CREATE TABLE new_table (...);
RENAME TABLE old_table TO backup_table, new_table TO old_table;

Переименование производится слева направо. Таким образом, для обмена именами между двумя таблицами необходимо выполнить следующие действия:

RENAME TABLE old_table TO backup_table,
        new_table TO old_table,
        backup_table TO new_table;

Для двух баз данных, находящихся на одном и том же диске, можно также осуществлять обмен именами:

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

При выполнении команды RENAME не должны иметь место заблокированные таблицы или активные транзакции. Необходимо также иметь привилегии ALTER и DROP для исходной таблицы и привилегии CREATE и INSERT - для новой.

Если MySQL сталкивается с какой-либо ошибкой при переименовании нескольких таблиц, то произойдет обратное переименование для всех переименованных таблиц, чтобы вернуть все в исходное состояние.

Оператор RENAME TABLE был добавлен в MySQL 3.23.23.

User Comments

Posted by M P on Wednesday December 18 2002, @5:27pm [Delete] [Edit]

In the following, the original table (db1.tbl1) is
removed during rename:
RENAME TABLE db1.tbl1 TO db2.tb1;
Therefore, RENAME TABLE does not allow you to
COPY a table from one database to another. Such a
COPY extension would be a handy feature. (Or does
someone know an existing method to copy a table
from one database to another?)

ADDENDUM: I figured out a way to
duplicate all
tables in one database to a different database. To
duplicate a database,
pipe 'mysqldump' to 'mysql.' Dump the original
table's structure as shown:
mysqldump --add-drop-table db1 | mysql
db2

If matching tables in db2 already exist, they get
dropped before being re-created via
--add-drop-table. This is a
good way to copy all tables from one database to
another on the same server.

Posted by Mat Williams on Wednesday December 18 2002, @5:29pm [Delete] [Edit]

mysqldump db1 tbl1 | sed
's/tbl1/tbl2/g' | mysql db2


Works nicely for table COPY.
db1 and db2 can be the same
Be warned that if the name of tbl1 appears
anywhere else (such as in the data) it will also
be substituted with this regex. Might not be what
you want.

Add your own comment.

Top / / Next / Up / Table of Contents