我需要创建一个包含表Member的数据库,该表有四个属性:first,middle,last name和name。
在使用'CREATE TABLE成员'时是否可以指示名称应设置为First + Middle + Last?还是必须在创建表后进行此操作?
示例:
CREATE TABLE成员(first_name varchar(80)NOT NULL, middle_name varchar(80)NULL, last_name varchar(80)NOT NULL, name varchar(255)NOT NULL);
答案 0 :(得分:1)
您可以创建BEFORE INSERT trigger and a BEFORE UPDATE trigger以将名称字段设置为CONCAT_WS('',first_name,middle_name,last_name)的值,如下所示...但不要这样做。这是一个糟糕的主意。根本不存储名称列。如果要选择名称,只需选择CONCAT_WS('',first_name,middle_name,last_name)AS full_name。
请注意,如果您要连接的任何值为null,CONCAT将返回null,因此您可能希望使用CONCAT_WS(带分隔符) - 如果列表中的任何值为null,则只会省略该值并使用剩下的。
如果你决定这样做,你的触发器可能看起来像这样:
CREATE TRIGGER name_update BEFORE UPDATE ON member
FOR EACH ROW
BEGIN
SET NEW.name = CONCAT_WS(' ', NEW.first_name, NEW.middle_name, NEW.last_name);
END;
CREATE TRIGGER name_insert BEFORE INSERT ON member
FOR EACH ROW
BEGIN
SET NEW.name = CONCAT_WS(' ', NEW.first_name, NEW.middle_name, NEW.last_name);
END;
我希望有所帮助。