MySQL ne prend pas en charge les colonnes ou expressions calculées dans l'option DEFAULT
d'une définition de colonne.
Vous pouvez le faire dans un déclencheur (MySQL 5.0 ou plus nécessaire):
CREATE TRIGGER format_stage_name
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END
Vous pouvez également créer un déclencheur similaire BEFORE UPDATE
.
Faites attention à NULL
dans le prénom et le nom de famille, car la concaténation d'un NULL
avec une autre chaîne produit un NULL
. Utilisez COALESCE()
sur chaque colonne ou sur la chaîne concaténée selon le cas.
éditer: L'exemple suivant définit stage_name
uniquement s'il s'agit de NULL
. Sinon, vous pouvez spécifier le stage_name
dans votre instruction INSERT
, et il sera conservé.
CREATE TRIGGER format_stage_name
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
IF (NEW.stage_name IS NULL) THEN
SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END IF;
END
Je ne l'ai pas utilisé MySQL, mais cette écrase toujours la colonne avec la valeur concaténés? Si vous voulez qu'il agisse par défaut, vous devriez pouvoir le remplacer, donc je pense que vous auriez besoin d'une fusion sur le NEW.stage_name aussi. –
@ bill-karwin Je reçois une erreur de syntaxe sur 'NEW.aka = CONCAT (NEW.fname, '', NEW.lname)' ... voir ma commande complète [** ici sur pastebin **] (http : //pastebin.com/FiEUBgcu) ... des pointeurs ?? – mOrloff
@mOrloff, j'ai oublié le mot clé 'SET'. J'ai modifié le code ci-dessus pour corriger cela. –