3.3数据更新
1.插入数据
1.插入元组
insert into 表名 [(表的各个属性)可不写]
values(信息) //字符串常数要用单引号括起来
2.插入子查询结果
insert into 表名 [(表的各个属性)可不写]
子查询
- 如果into子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值,而且符合表头顺序
指明属性列名,可以不按顺序,新插入元组顺序和属性列一样
- into指明属性列,values少写信息会自动赋空值
没有属性列,values要明确指定空值
2.修改数据
1.修改某个元组的值
update 表名
set 怎么改
where 条件(Sno='201215121')
2.修改多个元组的值
update 表名
set 怎么改
3.带子查询的修改
update 表名
set 怎么改
where 嵌套查询(子查询)
3.删除数据
1.删除某个元组的值
delete
from 表名
where 条件(Sno='201215121')
2.删除多个元组的值
delete
from 表名
3.带子查询的修改
delete
from 表名
where 嵌套查询(子查询)
3.4视图
1.建立和删除视图
create view 语句只是把视图的定义存入数据字典,并不执行select 语句
只是在对视图查询时,才按视图的定义从基本表中将数据查出
drop view 语句只是将视图的定义从数据字典中删除
- 基本表删除后,基本表导出的视图也无法使用,但定义还没有删。还要使用drop view
1.建立视图
create view 视图名
as
子查询
[with check option]
保证以后对视图进行插入、修改、删除操作时总满足子查询where的条件
2.删除视图
drop view 视图名
如果create 后面不指定目标列,则视图列为select 子句中的目标列
下面情况必须指定所有列名:
- 某个目标列不是单纯的属性名,而是聚集函数或列表达式
- 多表连接时选出几个同名列作为视图目标列时
- 视图中某个列需要更合适的别名
行列子集视图:从单个基本表导出某些行和某些列,而且保留了主码
分组视图:带有聚集函数和group by 子句的查询来定义视图
视图建立:
- 视图可以建立在一个或多个基本表上
- 可以建立在一个或多个以定义好的视图上
- 建立在基本表和定义好的视图上
定义基本表时,为了减少数据库中数据冗余,表中只存基本数据,由基本数据经各种计算派生出的数据一般是不存储的由于视图中的数据并不实际存储,所以定义视图时可以根据需要设置一些派生列属性。
这写派生列在基本表中不实际存在,称为虚拟列。这种视图也称带表达式的视图
2.查询视图
查询视图跟查询基本表一样
流程:(后两步成为视图消解)
- 数据库管理系统进行有效性检查,检查查询中涉及到的视图和基本表是否存在
- 从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,
- 等价的转换成对基本表的查询,执行修正了的查询
3.更新视图
通过插入(insert)、删除(delete)、修改(update) 对视图进行修改由于视图是不实际储存数据的虚表,对视图的更新操作最终要转变为对基本表的更新