关于视图数据修改的结果
基本认识
视图:是一个或多个表依照某个条件组合而成的部分选中字段的结果集(一般情况下只是用来进行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
- 新增外键(删除之前的外键约束影响: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:级当视图中存在使用函数得出的数据时,则不能修改