# Главная
# О библиотеке

# Выбор дистрибутива
преимущества Linux/UNIX | основные дистрибутивы | серверный Linux | BSD | LiveCDs | прочее

# Установка и удаление программ
общие вопросы | каталоги софта | специальные случаи

# Настройка и работа
установка, загрузчики | настройка Linux | консоль | файловые системы | процессы | шеллы, русификация, коммандеры | виртуальные машины, эмуляторы

# X Window и оконные менеджеры
настройка X Window | GNOME | KDE | IceWM и др.

# Работа с текстами
редакторы | офис | шрифты, кодировки и русификация | преобразования текстовых файлов | LaTeX, SGML и др. | словари

# Графика
GIMP | фото | обработка изображений | форматы графических файлов

# Сети, администрирование
общие вопросы | Dialup & PPP | брандмауэры | маршрутизация | работа в Windows-сетях | веб-серверы | Apache | прокси-серверы | сетевая печать | прочее

# Программирование
GCC & GNU make | программирование в UNIX | графические библиотеки | Tcl | Perl | PHP | Java & C# | СУБД | CVS | прочее

# Ядро
# Мультимедиа
# Интернет
# Почта
# Безопасность
# Железо
# Разное

# Linux HowTo (как сделать)
# Книги и руководства
# Материалы на английском языке


MySQL The World's Most Popular Open Source Database # Online shop | Site map |  
CompanyProductsSupport & ConsultingTraining & CertificationDownloadsDocumentation
  BooksArticlesMailing ListsPresentationsOther Sites  
Search the MySQL manual:
MySQL Manual
  • 6 Справочник по языку MySQL
    • 6.5 Определение данных: CREATE, DROP, ALTER
      • 6.5.1 Синтаксис оператора CREATE DATABASE
      • 6.5.2 Синтаксис оператора DROP DATABASE
      • 6.5.3 Синтаксис оператора CREATE TABLE
      • 6.5.4 Синтаксис оператора ALTER TABLE
      • 6.5.5 Синтаксис оператора RENAME TABLE
      • 6.5.6 Синтаксис оператора DROP TABLE
      • 6.5.7 Синтаксис оператора CREATE INDEX
      • 6.5.8 Синтаксис оператора DROP INDEX

Buy this Reference Manual in softcover from Barnes & Noble!

MySQL Reference Manual
Previous / 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:
<tt>RENAME TABLE db1.tbl1 TO db2.tb1;</tt>
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:
<tt>mysqldump --add-drop-table db1 | mysql
db2</tt>
If matching tables in db2 already exist, they get
dropped before being re-created via
<tt>--add-drop-table</tt>. 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]

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

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 / Previous / Next / Up / Table of Contents
# MySQL.com home | Site map | Contact us | Press | Jobs | Privacy policy | Trademark info | © 1995-2003 MySQL AB. All rights reserved.