Скопіюйте таблицю без копіювання даних


153
CREATE TABLE foo SELECT * FROM bar

копіює таблицю fooі дублює її як нову таблицю під назвою bar.

Як я можу скопіювати схему fooнової таблиці, що називається, bar без копіювання даних також?


1
як зробити те саме в sqlserver 2005?
Грім

що значить від бару?
Самій Сарайя


@Thunder виглядає так, що ви можете зробити копію "Тільки колони" в MS SQL. Дивіться це для довідки: stackoverflow.com/questions/2505728/…
Кевін Вортінгтон,

Відповіді:


140

Спробуйте:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Або:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

4
@Thunder: Спробуйтеselect * into foo from bar where 1=0
Andomar

29
Схоже, це не скопіює обмежень чи ключів
Тимо Хуовінен

15
@TimoHuovinen: Можливо create table NewTable like OldTable, для вас варіант. Посилання скопійовано із видаленої відповіді.
Андомар

1
Будьте дуже обережні, використовуючи це під навантаженням і з високою одночасністю. Мене щойно спалили за допомогою цього масштабу, де ми створили близько 50 різних таблиць на основі однієї і тієї ж вихідної таблиці одночасно із вставкою в таблицю джерел з інших процесів. По суті, це спричинило масовий зрив блокування і довелося перезапустити MySQL.
Марк Б

6
Гм, ОП плутається? Це очевидно неправильна відповідь на питання, якщо ми звернемо увагу на заголовок та наголос у питанні "... без копіювання даних ..." Відповідь RCNell справедливо найбільше голосується. Не впевнений, чому цього прийняли. Просто говорю'.
xyphenor

421

Спробуйте

CREATE TABLE foo LIKE bar;

тому ключі та індекси копіюються також.

Документація


40
Це краща відповідь, оскільки це також копіює індекси!
Chaitan

2
Це набагато краще, але все ще не копіює сторонні ключі.
Йозеф Сабл

@RCNeil, Чи CREATE TABLE new_tbl LIKE orig_tbl;копіює привілеї також? Або їх треба скопіювати вручну?
Pacerier

2
Можливо, тому, що ця відповідь надійшла на 4 роки пізніше тієї, що зазначена як правильна
pythonian29033

1
@ Pierre-OlivierVares Текст документації не має прямого відношення до фактичної відповіді. Текст відповіді є коротким, показуючи, як робити те, що задається питанням, тоді як посилання на документацію лише забезпечує додатковий контекст. Таким чином, роздуття відповіді текстом із документації не є корисним.
Авіон47

27
SHOW CREATE TABLE bar;

ви отримаєте оператор створення для цієї таблиці, відредагуйте назву таблиці чи будь-що інше, що вам подобається, а потім виконайте її.

Це дозволить вам скопіювати індекси, а також налаштувати створення таблиці вручну.

Ви також можете запустити запит у програмі.


Як ви могли перетворити show create table barв динамічно виконуваний оператор?
Pacerier

результат, наданий програмою show create table bar, вже виконується, якщо скрипт має дозвіл на створення таблиць, ви можете їх проаналізувати, а також виконати операції зміни таблиці.
Тімо Хуовінен

create table...не буде копіювати індекси. ця відповідь є кращим варіантом
план

2

Тільки хочу клонувати структуру таблиці:

CREATE TABLE foo SELECT * FROM bar WHERE 1 = 2;

Також хоче скопіювати дані:

CREATE TABLE foo as SELECT * FROM bar;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.