2019-05-06

关于视图数据修改的结果

注:一般面试官总是喜欢问修改了视图里的数据,表里面的数据会不会对应修改这类的问题!!!

基本认识

视图:是一个或多个表依照某个条件组合而成的部分选中字段的结果集(一般情况下只是用来进行select操作)
下面就单表视图进行测试:

准备阶段 :

1.学生表和分数表

CREATE TABLE TbStudent (
    stuid INTEGER NOT NULL,
        name VARCHAR (20) NOT NULL,
    sex bit DEFAULT 1,
    birth datetime ,
    tel CHAR (11),
    addr VARCHAR (255),
    PRIMARY KEY (stuid)
);


create table TbSC
(
scid integer primary key auto_increment,
sid integer,
scdate datetime,
score float
);
//学生信息数据插入
INSERT INTO `tbstudent` VALUES ('1', 'zhangsan', '0', null, '135', 'addr1');
INSERT INTO `tbstudent` VALUES ('2', 'lisi', '1', null, '136', 'addr2');

// 学生成绩信息插入
INSERT INTO `tbsc` VALUES ('1', '1', null, '83');
INSERT INTO `tbsc` VALUES ('2', '2', null, '84');
INSERT INTO `tbsc` VALUES ('3', '1', null, '16');

2.视图

create view  tb_view as select name ,tel from tbstudent 
  1. 新增外键(删除之前的外键约束影响:alter table TbSC drop foreign key tbsc_ibfk_1)
alter table TbSC add foreign key (sid) references TbStudent (stuid)

4. 测试

4.1 测试修改关联主键,设置级联是可以修改的
update tb_view set name ='zhangsan' where tel='123'
update tb_stu_score set stuid='1'   where  name = 'you'

结论1视图中为纯粹单表数据字段时,对视图修改会对应修改表中数据
结论2级联更新是可以的

4.2 测试函数数据,不能修改
create view tb_stu_score1 as select stuid ,name ,sum(score)  from tbstudent A,tbsc B where A.stuid = B.sid GROUP BY A.stuid
update tb_stu_score1 set name='you2'  where  stuid=3

报错:The target table tb_stu_score1 of the UPDATE is not updatable

结论3级当视图中存在使用函数得出的数据时,则不能修改

你可能感兴趣的:(2019-05-06)