【问题标题】:Concat function on MySQL viewMySQL视图上的Concat函数
【发布时间】:2015-05-18 07:49:42
【问题描述】:

对于包含字段“fname”和“lname”的表,我创建了一个包含字段“name”的视图,该字段是“fname”和“lname”的连接。

我想将字符串“firstname lastname”插入到该视图的“name”字段中,并自动更新为“fname”和“lname”字段中的“firstname”和“lastname”父表。

 create view emp_view as 
    -> select id,concat(fname,' ', lname) as name, email
    -> from employee;

 insert into emp_view
    -> values(1911,'xyz abc','abc@xyz.com');

ERROR 1471 (HY000): INSERT 的目标表 emp_view 不是 可插入

但错误表明视图不可插入。我做错了什么?

【问题讨论】:

    标签: mysql views concat


    【解决方案1】:

    引用view updatability上的文档:

    视图列必须是简单的列引用。它们不能是表达式...

    因此,在您的示例中, concat 使其成为不可更新的视图。

    这是有道理的,如果你将一个字符串传递给“name”,MySQL 怎么可能知道如何将字符串分配给字段“fname”和“lname”?

    【讨论】:

      【解决方案2】:

      您不能在视图中插入数据。一个视图是一个纯粹的SELECT。您必须将数据插入到VIEW 正在使用的表中。

      INSERT INTO employee (Id,fname,lname,Email) VALUES(1911,'Firstname','LastName','abc@xyz.com');

      你这样显示数据。

      SELECT * FROM emp_view;
      

      VIEW 将简单地运行语法

      SELECT id,concat(fname,' ', lname) as name,email FROM employee;
      

      【讨论】:

      • Insert 命令在简单视图上运行良好。关于我的问题,如果我创建一个显示“id”、“fname”和“lname”的视图(分别不使用连接函数),那么插入命令在这样的视图中完美运行。我的问题是,如果我使用 'fname' 和 'lname' 的串联创建一个视图,那么这样的视图在使用插入命令时会出错。
      • 您无法将数据插入视图。视图是SELECT 声明
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2018-06-06
      • 2018-10-10
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      相关资源
      最近更新 更多