如何根据mysql中的名字和姓氏自动填充名称?

时间:2015-02-26 01:30:37

标签: mysql database

我需要创建一个包含表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);

1 个答案:

答案 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;

我希望有所帮助。