Kopiuj tabelę bez kopiowania danych

153
CREATE TABLE foo SELECT * FROM bar

kopiuje tabelę fooi powiela ją jako nową tabelę o nazwie bar.

Jak mogę skopiować schemat programu foodo nowej tabeli o nazwie bar bez kopiowania danych?

Mateusz
źródło
1
jak zrobić to samo w sqlserver 2005?
Grzmot
co znaczy z baru?
Smit Saraiya
1
@SmitSaraiya fooi barsą arbitralnymi zmiennymi bez znaczenia , podobnie jak Alice i Bob .
Chris
@Thunder wygląda na to, że możesz wykonać kopię „tylko Colums” w MS SQL. Zobacz to w celach informacyjnych: stackoverflow.com/questions/2505728/…
Kevin Worthington

Odpowiedzi:

140

Próbować:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Lub:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Andomar
źródło
4
@ Thunder: Spróbujselect * into foo from bar where 1=0
Andomar
29
To nie wydaje się kopiować ograniczeń ani kluczy
Timo Huovinen
15
@TimoHuovinen: Być może create table NewTable like OldTablejest to opcja dla Ciebie. Link skopiowany z usuniętej odpowiedzi.
Andomar
1
Bądź bardzo ostrożny używając tego pod obciążeniem i przy dużej współbieżności. Właśnie zostałem nagrany przy użyciu tego na dużą skalę, gdzie utworzyliśmy około 50 różnych tabel opartych na tej samej tabeli źródłowej, w tym samym czasie, gdy wstawiliśmy do tabeli źródłowej z innych procesów. Zasadniczo spowodował masowe załamanie blokady i musiał ponownie uruchomić MySQL.
Mark B
6
Uhm, OP jest zdezorientowany? Jest to rażąco błędna odpowiedź na pytanie, jeśli zwrócimy uwagę na tytuł i akcent w pytaniu „… bez przepisywania danych…” Odpowiedź RCNell jest słusznie najwyżej głosowana. Nie wiem, dlaczego ten został przyjęty. Tylko mówię'.
xyphenor
421

Próbować

CREATE TABLE foo LIKE bar;

więc klucze i indeksy są również kopiowane.

Dokumentacja

RCNeil
źródło
40
To lepsza odpowiedź, ponieważ kopiuje również indeksy!
Chaitan
2
Jest znacznie lepszy, ale nadal nie kopiuje kluczy obcych.
Josef Sábl
@RCNeil, Czy CREATE TABLE new_tbl LIKE orig_tbl;kopiuje również uprawnienia? A może trzeba je skopiować ręcznie?
Pacerier
2
Prawdopodobnie dlatego, że ta odpowiedź nadeszła 4 lata później niż ta oznaczona jako poprawna
pythonian29033
1
@ Pierre-OlivierVares Tekst dokumentacji nie odnosi się bezpośrednio do rzeczywistej odpowiedzi. Tekst odpowiedzi jest zwięzły, pokazując, jak zrobić to, co zadane pytanie, podczas gdy link do dokumentacji zapewnia jedynie dodatkowy kontekst. W związku z tym nadymanie odpowiedzi tekstem z dokumentacji nie jest pomocne.
Abion47
27
SHOW CREATE TABLE bar;

otrzymasz instrukcję tworzenia dla tej tabeli, edytuj nazwę tabeli lub cokolwiek innego, a następnie wykonaj ją.

Umożliwi to skopiowanie indeksów, a także ręczne dostosowanie tworzenia tabeli.

Możesz również uruchomić zapytanie w programie.

Timo Huovinen
źródło
Jak można przekształcić show create table barinstrukcję w dynamicznie wykonywalną instrukcję?
Pacerier
wynik podany przez show create table barjest już wykonywalny, jeśli skrypt ma uprawnienia do tworzenia tabel, możesz go przeanalizować, a następnie wykonać również instrukcje alter table.
Timo Huovinen,
create table...nie kopiuje indeksów. ta odpowiedź jest lepszą opcją
bluepinto
2

Chcę tylko sklonować strukturę tabeli:

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

Chce również skopiować dane:

CREATE TABLE foo as SELECT * FROM bar;
Ali Azaz Alam
źródło