MySQL no soporta columnas o expresiones calculadas en la opción DEFAULT
de una definición de columna.
Usted puede hacer esto en un disparador (MySQL 5.0 o superior requiere):
CREATE TRIGGER format_stage_name
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END
También es posible que desee crear un disparador similares BEFORE UPDATE
.
Cuidado con NULL
en nombre y un apellido, porque concat de un NULL
con cualquier otra cadena produce una NULL
. Utilice COALESCE()
en cada columna o en la cadena concatenada según corresponda.
editar: El siguiente ejemplo establece stage_name
solo si es NULL
. De lo contrario, se puede especificar el stage_name
en su estado de cuenta INSERT
, y va a ser conservado.
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
No he utilizado MySQL, pero esto siempre sobrescribir la columna con el valor concatenado? Si quieres que actúe como predeterminado, deberías poder anularlo, por lo que creo que también necesitarías unirme en el NEW.stage_name. –
@ bill-karwin Recibo un error de sintaxis en 'NEW.aka = CONCAT (NEW.fname, '', NEW.lname)' ... vea el comando completo [** aquí en pastebin **] (http : //pastebin.com/FiEUBgcu) ... ¿Alguna sugerencia? – mOrloff
@mOrloff, olvidé la palabra clave 'SET'. He editado el código de arriba para corregir esto. –