数据库原理及应用(十二)更新、视图、索引

插入数据

        单个元组插入

insert into Student(Sno,Sname) Values ('95020','陈冬')

        插入子查询结果

Insert into Deptage(Sdept,Avgage)
    select Sdept,AVG(Sage)
    from Student
    Group by Sdept

修改数据

        update...set...where

update Sutdent set Sage = 22 where Sno='95001'

        带子查询的修改语句(不相关子查询)

update Sc set Grade = 0 where Sno in 
    (select Sno from Student where Sdept = 'CS')

        带相关子查询的修改语句

update SC set Grade = 0 where 'CS'=
    (select Sdept from Student where Student.Sno=SC.Sno)

删除数据

        指定要删除的元组(满足where条件),如果缺省会删除所有元组

        执行删除语句的时候会检查完整性规则(拒绝删除操作或者进行级联删除

delete from Student where Sno = '95019'--删除一个元组/多个元组

delete from Sc--全部删除

delete from Sc where Sno in
    (select Sno from Student where Sdept = 'Cs')--带不相关子查询的删除

视图

        并不物理存在,是虚拟的

        对应关系

SQL用户用户X
外模式视图
关系模式基本表
内模式存储文件

        特点:         1.是虚拟表(可以来源于一个或几个表)

                            2.之存放视图定义,不会出现冗余数据

                            3.基表中的数据发生改变,视图也会随之改变

        操作:

                建立视图(定义视图)

                        列名如果缺省,会直接由子查询查的目标列组成

                        出现以下情况必须指定列名:         1.目标列是函数集或列表达式

                                                                                2.目标列为*

                                                                                3.选出同名列

                                                                                4.视图中需要更合适名字

                        视图的定义中不能出现 order by / distinct

                行列子集视图

                        (视图来自于一个表,仅去掉部分行列,但是必须保留主码)

create view V_StuIs as Select Sno,Sname,Sage
    from Student where Sdept = 'IS'

                        WITH CHECK OPTION,透过视图更新时会自动检查符不符合创立的条件

                                修改/删除会自动加上sdept='IS',插入时如果sdept不为IS会拒绝操作,如果没有值会自动定义为IS

create view V_StuIs as Select Sno,Sname,Sage
    from Student where Sdept = 'IS' with check option

                基于多个基表的视图

create view V_S1(Sno,Sname,Grade) as select Student.Sno,Sname,Grade
    from Student,Sc where Sdept = 'IS' and Student.Sno = Sc.Sno and Sc.Cno=1

                基于视图的视图

create view V_S2 as select Sno,Sname,Grade from V_S1
    where Grade >= 90

                带表达式的视图(必须带别名

create view V_BTS(Sno,Sname,Sbirth) as select Sno,Sname,2018-Sage
    from Student

                分组视图

create view V)SG(Sno,Gavg) as select SSno,AVG(Grade)
    from Sc group by Sno

        删除视图

drop view V_S1

                如果存在V_S2基于V_S1那么它将无法使用,但是依然会存在与数据字典中

        查询视图

select Sno,Sage from V_StuIs where Sage < 20

                实际上就是查询表(视图实体化法、视图消解法)

        更新视图

                实际上就是更新源表(视图实体化法、视图消解法)

update V_StuIs set Sname = '张三' where Sno='95002'

                大部分视图是不可以更新的,100%可以更新的视图是行列子集视图

        视图的优势

                1.简化用户的操作

                2.使用户可以多角度看待统一数据

                3.为数据库提供一定程度的逻辑独立性

                4.对机密数据提供安全保护

索引

        对应三层模式的内模式,加快查询速度的有效手段

        建立索引

                系统自动建立

                        primary key 

                        unique

                DBA或表的属主(根据需求自行建立)

                聚簇索引:数据按照此索引的顺序在磁盘上存储一个表至多一个聚簇索引

                唯一索引:可以创建多个,但如果列中有重复的数据就不可以创建唯一索引

                建立唯一索引

create unique index idx_scno on Course(Cno)

create unique index idx_scno on Sc(Sno ASC,Cno DESC)

       删除索引

drop index idx_scno

        维护索引

                系统自动维护

        使用索引

                系统自动选择是否使用/如何使用索引

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值