在MySQL中插入视图中的行时出错

在MySQL中插入视图中的行时出错,mysql,Mysql,我想在视图中插入一行。在这样做时,我得到了一个错误。如何解决此错误? 这是我的密码: CREATE OR REPLACE VIEW DETAILS AS SELECT null as pSerial_number, null as pname,NULL AS additional_field1 from student; insert into details (pSerial_number,pname,additional_field1) values (priya,41); 错误:错误

我想在视图中插入一行。在这样做时,我得到了一个错误。如何解决此错误? 这是我的密码:

CREATE OR REPLACE VIEW DETAILS
AS 
SELECT null as pSerial_number, null as pname,NULL AS additional_field1 
from student;
insert into details (pSerial_number,pname,additional_field1) values (priya,41);
错误:错误代码:1348。“pSerial_number”列不可更新


注意:我在视图中添加的所有列都不在表中。

如注释中所述,您不能使用
insert
命令将列添加到视图中。
insert
命令将数据插入表中。视图是select命令的投影,因此要在视图中插入柱,需要更改视图。因此,它应该是:

create or replace view details
 as
SELECT null as pSerial_number, 
       null as pname,
       NULL AS additional_field1 
from student;
这足以将
附加_字段1
添加到该视图中

这里的问题是您的视图毫无意义,因为它将
student
表中的所有行都列为这三个手动字段的
nulls

例如,假设
student
表的结构是

serial_number varchar,
name varchar,
additional_field1 int
其中的值为:

serial_number   name    additional_field1
   AD5424       Test1      1
   AD5421       Test2      2
   AD5422       Test3      3
如果您运行上述代码(创建视图),然后对其运行
select
语句,如
select*from details
,您将收到以下响应:

serial_number   name    additional_field1
   null         null      null
   null         null      null
   null         null      null
因此,您可以将视图相应地映射到表列,如下所示:

create or replace view details
 as
SELECT serial_number as pSerial_number, 
       name as pname,
       additional_field1 AS additional_field1 
from student;
现在,如果您在其上运行
select
语句
select*from details
,您将得到:

pSerial_number   pname    additional_field1
   AD5424       Test1      1
   AD5421       Test2      2
   AD5422       Test3      3
请注意student表的列名称和值


我希望这有助于澄清什么是视图以及如何更改视图。

您不能在视图输出中添加列。使用
SELECT*fromDetails交叉连接(选择{值和列名列表})。您的
values
子句(2)中的值金额与列列表(3)中的列金额不匹配。