MySQL - Définir la valeur par défaut pour le champ en tant que fonction de concaténation de chaîne
J'ai une table qui ressemble un peu à ce acteurs(prénom, nom de famille, stage_name);
Je veux mettre à jour stage_name avoir une valeur par défaut de
forename." ".surname
De sorte que
insert into actors(forename, surname) values ('Stack', 'Overflow');
serait de produire l'enregistrement
'Stack' 'Overflow' 'Stack Overflow'
Est-ce possible?
Merci 🙂
source d'informationauteur adam
Vous devez vous connecter pour publier un commentaire.
MySQL ne prend pas en charge les colonnes calculées ou des expressions dans le
DEFAULT
option d'une définition de colonne.Vous pouvez le faire dans un déclencheur (MySQL 5.0 ou supérieur requis):
Vous pouvez également créer un déclencheur
BEFORE UPDATE
.Regarder pour
NULL
dans le prénom et nom de famille, parce que concat d'unNULL
avec n'importe quelle autre chaîne produit unNULL
. UtilisationCOALESCE()
sur chaque colonne ou sur la chaîne concaténée appropriées.edit: L'exemple suivant définit
stage_name
seulement si c'estNULL
. Sinon, vous pouvez spécifier lestage_name
dans votreINSERT
déclaration, et il sera préservé.Selon 10.1.4. Type De Données Valeurs Par Défaut non, vous ne pouvez pas le faire. Vous pouvez uniquement utiliser une constante ou
CURRENT_TIMESTAMP
.Otoh, que si vous êtes assez à jour, vous pourriez probablement utiliser un déclencheur pour accomplir la même chose.
Ma première pensée est que si vous avez les deux valeurs dans d'autres domaines, ce qui est l'impérieuse nécessité d'assurer la redondance de les stocker dans un troisième champ? Il vole dans le visage de la normalisation et de l'efficacité.
Tout simplement si vous souhaitez stocker la concaténation de la valeur, alors vous pouvez simplement créer une vue (ou IMSNHO encore mieux une procédure stockée) qui concatène les valeurs dans une pseudo
actor
champ et effectuer votre lit à partir de la vue/la procédure stockée à la place de la table directement.Si vous absolument devez stocker la concaténation de la valeur que vous pourriez gérer cela de deux manières:
1) l'Utilisation d'une procédure stockée pour faire vos inserts au lieu de directement de SQL. De cette façon, vous pouvez recevoir les valeurs et de construction d'une valeur pour le champ que vous souhaitez remplir puis de construire l'instruction insert, y compris un concaténées de la valeur pour les acteurs de terrain.
2), de Sorte que je ne dessine pas trop de flammes, de traiter cette suggestion avec des gants. Utiliser que comme un dernier recours. Vous pourriez hack ce comportement par l'ajout d'un déclencheur pour construire la valeur si elle n'est pas nulle. Généralement les déclencheurs ne sont pas bonnes. Ils ajoutent invisible coût et à l'interaction équitable de simples interactions. Vous pouvez, cependant, utiliser la commande CREATE TRIGGER pour mettre à jour les acteurs de terrain après un enregistrement est insérée ou mise à jour. Voici la page de référence:
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html