MySQL不支持列定义的DEFAULT
选项中的计算列或表达式。
您可以在触发做到这一点(的MySQL 5.0或更高要求):
CREATE TRIGGER format_stage_name
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END
您可能还需要创建一个类似的触发器BEFORE UPDATE
。
小心在forename和姓氏,因为连接NULL
与任何其他字符串连续产生NULL
。根据需要在每列或连接字符串上使用COALESCE()
。
编辑:以下示例仅在NULL
的情况下设置stage_name
。否则,您可以在INSERT
声明中指定stage_name
,并将其保留。
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
我没有使用MySQL,但是将这个始终覆盖与级联值的列?如果你想让它作为默认值,你应该可以覆盖它,所以我认为你也需要在NEW.stage_name上合并。 – 2008-12-11 19:26:02
@ bill-karwin我在`NEW.aka = CONCAT(NEW.fname,',NEW.lname)``上得到了一个语法错误`...看到我的完整命令[** here pastebin **](http ://pastebin.com/FiEUBgcu)...任何指针?? – mOrloff 2012-10-17 21:08:25