Copier le tableau sans copier les données

153
CREATE TABLE foo SELECT * FROM bar

copie la table fooet la duplique en tant que nouvelle table appeléebar .

Comment puis-je copier le schéma de foo dans une nouvelle table appelée bar sans copier également les données?

Matthieu
la source
1
comment faire la même chose dans sqlserver 2005?
Thunder
que signifie du bar?
Smit Saraiya
@Thunder semble que vous pouvez faire une copie "Colums seulement" dans MS SQL. Voir ceci pour référence: stackoverflow.com/questions/2505728/…
Kevin Worthington

Réponses:

140

Essayer:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Ou:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Andomar
la source
4
@Thunder: Tryselect * into foo from bar where 1=0
Andomar
29
Cela ne semble pas copier les contraintes ou les clés
Timo Huovinen
15
@TimoHuovinen: C'est peut create table NewTable like OldTable- être une option pour vous. Lien copié à partir de la réponse supprimée.
Andomar
2
Être vraiment prudent lorsque vous utilisez ceci sous charge et avec une concurrence élevée. Je viens d'être gravé en utilisant ceci à grande échelle, où nous avons créé environ 50 tables différentes basées sur la même table source, en même temps que l'insertion dans la table source à partir d'autres processus. Fondamentalement, il a causé un effondrement massif des verrous et a dû redémarrer MySQL.
Mark B
6
Uhm, OP est confus? C'est manifestement une mauvaise réponse à la question, si nous prêtons attention au titre et à l'accent mis dans la question "... sans recopier les données ..." La réponse de RCNell est à juste titre votée la plus haute. Je ne sais pas pourquoi celui-ci a été accepté. Je dis juste.
xyphenor
423

Essayer

CREATE TABLE foo LIKE bar;

donc les clés et les index sont également copiés.

Documentation

RCNeil
la source
40
C'est une meilleure réponse puisque cela copie également les index!
Chaitan
2
C'est beaucoup mieux, mais ne copie toujours pas les clés étrangères.
Josef Sábl
@RCNeil, Copie-t-il également des CREATE TABLE new_tbl LIKE orig_tbl;privilèges? Ou doivent-ils être copiés manuellement?
Pacerier
2
Probablement parce que cette réponse est arrivée 4 ans plus tard que celle marquée comme correcte
pythonian29033
1
@ Pierre-OlivierVares Le texte de la documentation n'est pas directement pertinent à la réponse réelle. Le texte de la réponse est concis en montrant comment faire ce que la question a demandé, tandis que le lien de documentation fournit simplement un contexte supplémentaire. En tant que tel, gonfler la réponse avec le texte de la documentation n'est pas utile.
Abion47
27
SHOW CREATE TABLE bar;

vous obtiendrez une instruction de création pour cette table, éditerez le nom de la table, ou tout autre élément de votre choix, puis l'exécuterez.

Cela vous permettra de copier les index et d'ajuster manuellement la création de la table.

Vous pouvez également exécuter la requête dans un programme.

Timo Huovinen
la source
Comment pourriez-vous convertir show create table baren une instruction exécutable dynamiquement?
Pacerier
le résultat donné par show create table barest déjà exécutable, si le script a l'autorisation de créer des tables, vous pouvez l'analyser puis exécuter également les instructions alter table.
Timo Huovinen
create table...ne copiera pas les index. cette réponse est la meilleure option
bluepinto
2

Je veux seulement cloner la structure de la table:

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

Veut également copier les données:

CREATE TABLE foo as SELECT * FROM bar;
Ali Azaz Alam
la source