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级当视图中存在使用函数得出的数据时,则不能修改

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,884评论 5 116
  • 作者:烨竹 数据库的基本操作 登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 ...
    DragonRat阅读 1,402评论 0 7
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,171评论 1 32
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,773评论 0 8
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,494评论 0 9