2010-06-23 5 views
2

Dans MySQL, est-il possible d'ajouter des colonnes par défaut après leur création ou de les créer automatiquement? Un bref aperçu est le suivant:CREATE TABLE auto ajouter des colonnes par défaut?

Toutes les tables doivent avoir 5 champs normalisés dans nos bases de données (created_on, created_by, row_status, etc.). C'est parfois difficile pour les développeurs de se rappeler de le faire et/ou de ne pas le faire uniformément. À l'avenir, nous aimerions automatiser la tâche d'une certaine manière. Est-ce que quelqu'un sait s'il est possible de créer une sorte de script mysql interne qui ajoutera automatiquement un ensemble de colonnes à une table? Après avoir lu certaines réponses, je pense que je reformulerais le bit de question, plutôt que d'en faire une tâche autoamtic (c'est-à-dire EVERY Table), faire fonctionner cette fonction qui peut être déclenchée par l'utilisateur et vérifier lesdites colonnes et sinon les ajouter. Je suis assez confiant que c'est hors de la portée de SQL et qu'il faudrait un langage de script, pas un gros problème, mais il aurait été préférable de garder les choses encapsulées dans SQL.

Répondre

1

Je ne suis pas très au courant des outils de modélisation de données spécifiques à MySQL, mais il n'y a pas d'infrastructure pour ajouter des colonnes à chaque table jamais créée dans une base de données. En faire un comportement automatique serait également désordonné, quand on pense à des situations où quelqu'un a ajouté les colonnes mais il y a eu des fautes de frappe. Ou si vous avez des tables qui sont autorisées à aller à l'encontre des pratiques commerciales (les colonnes que vous avez énumérées ne seront généralement pas utiles sur les tables de codes) ...

Les environnements de développement sont difficiles à contrôler, mais le meilleur moyen de contrôler cela est de déléguer la responsabilité & autorisations à aussi peu de personnes que possible. IE: Il peut y avoir 5 développeurs, mais un seul d'entre eux peut appliquer des scripts à TEST/PROD/etc, il est donc de leur responsabilité de vérifier l'exactitude des scripts de la table.

+0

Vous avez un bon point ici. Je suppose que je reformulerais pour demander s'il y avait un moyen de faire une fonction interne pour ajouter lesdites colonnes de sorte qu'il ne soit pas automatiquement déclenché, mais une option pour ajouter plus rapidement lesdites colonnes – CogitoErgoSum

+0

@CogitoErgoSum: Oui, vous pouvez créer une procédure stockée dans MySQL, mais parce que vous devrez passer le nom de la table en paramètre - vous devrez utiliser MySQL Prepared Statements (SQL dynamique). Mais ce n'est pas une balle d'argent ... –

1

Je dirais d'abord - ne faites pas cela. créer une table d'audit séparément - et lier avec des déclencheurs. Dans le cas contraire, vous devrez alimenter la construction de votre table via une procédure ou une autre application qui créera ce que vous voulez.

+0

Les colonnes listées par l'OP sont typiques de la gestion de la simultanéité; une table d'audit est pour montrer toute l'histoire ... –

+0

OMG Ponies a raison, bien que dans un certain scénario on pourrait employer une table principale pour maintenir l'information que je recherche et maintenir des colonnes pour référencer le nom de table et l'identification primaire ... pas encore la situation la plus idéale. Je ne suis pas sûr de savoir comment un tel tableau serait efficace sur le plan de l'efficience, d'autant plus que nous prévoyons une grande mise à l'échelle. – CogitoErgoSum

0

Je déférerais d'abord à Randy's answer - cette information est probablement mieux extraite ailleurs. Cela dit, si vous êtes sur l'ajout des colonnes, ALTER TABLE est probablement ce que vous cherchez. Vous pouvez également inclure une logique supplémentaire pour déterminer les colonnes manquantes pour chaque table.

+0

Sur cette route, on va aussi créer un script basé PHP peut-être qui est exécuté après la création des tables et s'assurer que les colonnes requises sont là ... sinon, ajoutez-les. J'ai débattu de cette route mais j'espérais savoir au sein de SQL s'il y avait une route plus directe. – CogitoErgoSum

Questions connexes