Будьте очень осторожны при использовании этого под нагрузкой и с высоким параллелизмом. Я только что использовал это в масштабе, где мы создали около 50 различных таблиц на основе одной и той же исходной таблицы, в то же время вставляя в исходную таблицу другие процессы. В основном это вызвало массовое разрушение блокировки и пришлось перезапустить MySQL.
Марк Б
6
Хм, ОП смущен? Это явно неправильный ответ на вопрос, если мы обратим внимание на заголовок и акцент в вопросе «... без копирования данных ...». Ответ RCNell по праву получил наибольшее количество голосов. Не уверен, почему этот был принят. Просто говорю'.
Это лучший ответ, поскольку он также копирует индексы!
Чайтан
2
Это намного лучше, но все еще не копирует внешние ключи.
Йозеф Сабл
@RCNeil, CREATE TABLE new_tbl LIKE orig_tbl;копирует ли права тоже? Или они должны быть скопированы вручную?
Pacerier
2
Вероятно, потому что этот ответ пришел на 4 года позже, чем тот, который помечен как правильный
pythonian29033
1
@ Pierre-OlivierVares Текст документации не имеет непосредственного отношения к фактическому ответу. Текст ответа лаконичен и показывает, как выполнить заданный вопрос, а ссылка на документацию просто предоставляет дополнительный контекст. Таким образом, раздутый ответ с текстом из документации не является полезным.
Abion47
27
SHOW CREATETABLE bar;
вы получите инструкцию create для этой таблицы, отредактируете имя таблицы или что-то еще, что вам нравится, и затем выполните его.
Это позволит вам скопировать индексы, а также вручную настроить создание таблицы.
Как вы могли бы преобразовать show create table barв динамически исполняемый оператор?
Pacerier
полученный в результате результат show create table barуже выполним, если у скрипта есть разрешение на создание таблиц, вы можете проанализировать его и затем выполнить операторы alter table.
Тимо Хуовинен
create table...не будет копировать индексы. этот ответ - лучший вариант
foo
иbar
являются произвольными бессмысленными переменными , во многом как Алиса и Боб .Ответы:
Пытаться:
Или:
источник
select * into foo from bar where 1=0
create table NewTable like OldTable
, это вариант для вас. Ссылка скопирована с удаленного ответа.Пытаться
поэтому ключи и индексы копируются так же хорошо.
Документация
источник
CREATE TABLE new_tbl LIKE orig_tbl;
копирует ли права тоже? Или они должны быть скопированы вручную?вы получите инструкцию create для этой таблицы, отредактируете имя таблицы или что-то еще, что вам нравится, и затем выполните его.
Это позволит вам скопировать индексы, а также вручную настроить создание таблицы.
Вы также можете запустить запрос в программе.
источник
show create table bar
в динамически исполняемый оператор?show create table bar
уже выполним, если у скрипта есть разрешение на создание таблиц, вы можете проанализировать его и затем выполнить операторы alter table.create table...
не будет копировать индексы. этот ответ - лучший вариантХочется только клонировать структуру таблицы:
Также хочет скопировать данные:
источник