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?


1
jak zrobić to samo w sqlserver 2005?
Grzmot

co znaczy z baru?
Smit Saraiya


@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

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


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.


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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.