Ê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.
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 CREATETABLE 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.
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:
foo
etbar
sont des variables arbitraires sans signification , un peu comme Alice et Bob .Réponses:
Essayer:
Ou:
la source
select * into foo from bar where 1=0
create table NewTable like OldTable
- être une option pour vous. Lien copié à partir de la réponse supprimée.Essayer
donc les clés et les index sont également copiés.
Documentation
la source
CREATE TABLE new_tbl LIKE orig_tbl;
privilèges? Ou doivent-ils être copiés manuellement?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.
la source
show create table bar
en une instruction exécutable dynamiquement?show create table bar
est 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.create table...
ne copiera pas les index. cette réponse est la meilleure optionJe veux seulement cloner la structure de la table:
Veut également copier les données:
la source