Quand on utilise "L'onglet ALTER TABLE ADD ADD COL", la nouvelle colonne est ajoutée à la fin de la table. Par exemple:
TABLE: TAB COL_1 COL_2 COL_3 COL_4
7 Réponses :
Par défaut, les colonnes ne sont ajoutées qu'à la fin. P>
Pour insérer une colonne au milieu, vous devez déposer et recréer la table et tous les objets associés (contraintes, indices, indices de valeur, relations, etc.). P>
Plusieurs outils font cela pour vous et en fonction de la taille de la table, cela peut être une opération intensive. P>
Vous pouvez également envisager de créer des vues sur la table qui affiche des colonnes de l'ordre de préférence (remplacement de l'ordre réel dans la table). P>
Oui, la solution de vue était ce que je savais et allait être ma première tentative, mais j'espérais une sorte d'espoir une solution plus simple: /
http://www.orafaq.com/wiki/sql_faq#how_column_o_add_a_column_to_the_middle_of_a_table.3f dit que cela ne peut pas être fait et suggère des solutions de contournement de renommer la table et de faire un tableau Créer comme sélection ... CODE> ou (quelque chose que je suis inconnu avec) "Utilisez le package DBMS_REDEFINITION pour changer la structure ". P>
Alter Table Tablead Nom Alter colonne Nom de colonne Position x; p> blockQuote>
Est position code> spécifique à mysql?
Cela fonctionne aussi sur MySQL. Ce n'est pas standard SQL. Mais la réponse pourrait aider quelqu'un avec un problème similaire à utiliser un DB qui soutient cette
Est-ce que je le fais mal? Alter Table Expense_Testable Alter Colonne Col3 Position 3; Code> Son donneur d'erreur: Erreur 1064 (42000): Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de serveur MySQL pour la syntaxe droite à utiliser près de la "position 3" à la ligne 1
Je sais que c'est l'ancien sujet (2009) mais peut-être que cela aidera quelqu'un qui cherche toujours une réponse. Dans mysql, cela fonctionne 2 ajoutez une colonne n'importe où dans la table.
ALTER TABLE `tablename` ADD `column_name1` TEXT NOT NULL AFTER `column_name2`;
Ça fonctionne.
ALTER TABLE tablename ADD columnname datatype AFTER columnname;
S'il vous plaît laissez-moi savoir la version compatible de SQL pour la requête ci-dessus
Selon mes petites recherches, le seul moyen est de créer les vues de la table précédente dans une commande requise des colonnes ou de recréer la table à partir de la gratorisation et de certains outils de requête SQL, le mot-clé «Après» pourrait fonctionner ». < / p>
Si vous avez la table COL_1, COL_2, COL_4, vous avez voulu ajouter COL_3 après col_2, vous pouvez simplement le faire:
alter table <table_name> modify col_4 invisible; alter table <table_name> add col_3 <type>; alter table <table_name> modify col_4 visible;
Est-ce que c'est vraiment important? La commande de colonne ne devrait pas être pertinente pour rien, sauf si vous utilisez
SELECT * code>, auquel cas, vous ne devriez pas être ....@skaffman, je comprends ce que vous voulez dire que Select * est un peu rugueux. Mais il est vraiment agréable de pouvoir l'utiliser, en particulier pour des requêtes personnalisées rapides envoyées contre la base de données. Jusqu'à présent, tout le monde utilisait Select *, et mes options doivent réparer la colonne Oder ou pour rééducater tout le monde (et ils veulent simplement obtenir leur travail rapidement et sans douleur) qu'ils doivent utiliser correctement SQL. "Ces personnes" sont des programmeurs mais non des programmeurs de DB et ils trouvent la nécessité d'écrire d'énormes requêtes pour répondre à une simple question fastidieuse.
@ROBERT Gould - Donnez aux gens un fichier texte avec des requêtes courantes qu'elles peuvent utiliser ou au moins leur donner «Sélectionnez-vous ... à partir de la table» et ils peuvent mettre dans le reste.
@ROBERT: Ici une idée, alors: Définissez une vue pour chaque table, avec la vue ayant une commande de colonne fixe et que vos utilisateurs
sélectionnent * code> à partir de celui-ci au lieu de la table. Beaucoup plus facile de recréer une vue qu'une table.@skaffman, merci :) apparemment c'est comme ça que je vais résoudre le problème, puisqu'il ne semble pas possible de faire ce que je voulais faire à l'origine faire.