Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > нужно сделать копию таблицы


Автор: Geser 20.1.2007, 14:04
Есть таблица с данными. Нужно сделать ее полную копию. 
Как это можно сделать?
Через SELECT INSERT не хотелось бы т.к. слишком много доп.манимуляций с бд.
ЗЫ:таблиц много.

Автор: Akina 20.1.2007, 14:13
Backup Table / Restore Table

а быстрее всего mysqlhotcopy 

Автор: Geser 20.1.2007, 14:20
Забыл сказать - интересует только sql-запрос.
Всякие тулзы не подходят т.к. будет на подобие предустановленного скрипта.

Автор: Akina 20.1.2007, 14:23
Backup Table / Restore Table - это TSQL.
mysqlhotcopy - это предустановленный в составе MySQL скрипт.

Автор: sergejzr 20.1.2007, 14:27
Код

CREATE TABLE tab1 SELECT * FROM tab2;

Правда индексы придётся самому ставить. Дa и не быстрее это первого варианта..

Автор: Geser 20.1.2007, 14:31
Akina, а mysqlhotcopy в php-скрипт запихнуть можно? smile Насколько я понимаю - нет.
Я же выше написал, что мне нужен чистый sql-запрос
sergejzr, т.е.?

Автор: Rodman 20.1.2007, 14:34
Код

SELECT *
INTO MyNewTable
FROM MyTable

Автор: sergejzr 20.1.2007, 14:39
Цитата(Geser @  20.1.2007,  13:31 Найти цитируемый пост)
sergejzr, т.е.?

Данные скопируются, а индексы нет.

Автор: Geser 20.1.2007, 14:44
sergejzr, уже вижу. Но не смотря на это, такой вариант более предпочтителен, чем тот что предложил Rodman.
Индексы создавать руками не хотелось бы. smile 

Автор: sergejzr 20.1.2007, 14:52
Цитата(Geser @  20.1.2007,  13:44 Найти цитируемый пост)
Индексы создавать руками не хотелось бы

Если у тебя пхп, то сперва селектируй "SHOW CREATE TABLE" это тебе даст полностью запрос для создания. Заменишь там имя таблицы и выполнишь его.
А потом 
"SELECT * INTO MyNewTable FROM MyTable", как предложил Rodman, или 

"INSERT INTO tab2 SELECT * FROM tab1"

В любом случае это правильные варианты. По скорости не отличаются от работы с дампом

Автор: Geser 20.1.2007, 14:55
Сенк, попробуем...
А Rodman вариант не работает(ругается на имя новой таблицы, которая не создана). 

Автор: Rodman 20.1.2007, 15:00
ну так конечно ругаться будет... этот запрос не предусматривает создание таблицы, только выборку и добавление данных...

Автор: Geser 20.1.2007, 15:05
Ну вот поэтому он мне и не подошел. smile 

Автор: muzer 20.1.2007, 15:15
Rodman, в очередной (на моей памяти четрвёртый) раз полный бред говорите. MySQL такого синтаксиса даже не поддерживает (http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-select-into-table.html). У вас в голове какая-то каша.

Geser, 
Самый быстрый способ, это конечно же, манипуляция с файлами, а не с помоющью запросов.

Классический способ запросами: 
CREATE TABLE tablecopy LIKE table;
ALTER TABLE tablecopy DISABLE KEYS;
INSERT INTO tablecopy SELECT * FROM table;
ALTER TABLE tablecopy ENABLE KEYS;

Автор: Rodman 20.1.2007, 15:44
muzer, я не работаю на прямую только с СУБД... я обрабатываю данные программно и тем самым формирую запросы циклические или еще какие нить... 

Свои запросы, которые я предлагал я смогу реализовать из делфей.... вот и предложил основу... 

если хочешь я всех буду тебе направлять... чтоб у тебя голова не болела за меня...

Автор: muzer 20.1.2007, 15:57
Rodman, какая нафиг разница как работать с базой данных, если предоженный вами синтаксис просто не поддерживается, т.е. он неверный, такой запрос в mysql не будет работать. И неважно из delphi вы с mysql соединятетесь или нет.

Направлять мне никого не надо.
Я просто не понимаю смысла давать советы, которые не работают. Может объясните?

Автор: sergejzr 20.1.2007, 16:01
Цитата(muzer @  20.1.2007,  14:57 Найти цитируемый пост)
Может объясните? 

Модератор: Обьясняйтесь по ПМ, пожалуйста! Здесь не место для разборок!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)