sql更新视图
‘壹’ 利用sql语句如何更新视图
更新视图有以下三条规则:
(1)
若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。
(2)
若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。
(3)
若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为‘行列子集视图’。对这类视图可执行更新操作。
视图只有满足下列条件才可更新:
1、select语句在选择列表中没有聚合函数,也不包含TOP,GROUP
BY,UNION(除非视图是分区视图)或DISTINCT子句。聚合函数可以用在FROM子句的子查询中,只要不修改函数返回的值。
2、select语句的选择列表中没有派生列。派生列是由任何非简单列表达式(使用函数、加法或减法运算符等)所构成的结果集列。
3、select语句中的FROM子句至少引用一个表。select语句不能只包含非表格格式的表达式(即不是从表派生出的表达式)。
4、INSERT,UPDATE和DELETE语句在引用可更新视图之前,也必须如上述条件指定的那样满足某些限制条件。只有当视图可更新,并且所编写的UPDATE或INSERT语句只修改视图的FROM子句引用的一个基表中的数据时,UPDATE和INSERT语句才能引用视图。
只有当视图在其FROM子句中只引用一个表时,DELETE语句才能引用可更新的视图。
‘贰’ SQL语言视图更新
INSERT语句向视图插入数据,但应该注意的是:插入的数据实际上存放在基表中,而不是视图中;
updare好象不行,需要用到另一语句(忘了,呵呵)
‘叁’ 在SQL 里哪些视图可以更新,哪些不可以更新。(要写500字的论文)希望提供全面一点的~
视图一般式可以更新的,但前提是不能有聚合函数或分组等。
在这个前提下:
1:简单视图
就是由一个表生成出来的视图,这种情况你更新她就和更新表一样
2:二次加工出来的简单视图
仍然是一个表出来的视图,但是视图中存在通过函数或计算二次加工出来的其他字段。更新的时候只要不更新这些加工出来的字段也是可以更新的。
3:组合视图
通过表之间关联联合等出来的复杂视图。这种视图更新的时候要注意你所更新的列要来自同一个表,也是可以更新的。
4:静态视图
这种视图等同于表可以直接更新,但是更新的数据尽在视图中反映出来,不反映到原表
5:其他视图
通过表函数等其他生成的更为复杂的视图。一般不可更新
‘肆’ plsql表更新后视图未更新
plsql表更新后视图未更新,可能是不汇总或数据被加工过
一般来说,通过视图进行数据更新(INSERT、UPDATE、DELETE),只要该视图是单纯的SELECT语句定义的视图即可。也就是说,如果是不汇总或数据被加工过而是直接显示数据的视图,一般可以通过该视图来更新数据。在这种情况下,在数据库侧,将针对视图的DML语句(INSERT、UPDATE、DELETE)自动转换成表的DML语句,来更新数据。
但是,对于定义的复杂视图,DML语句无法在数据库侧转换成表的DML语句,因此会发生错误。这种情况下如果在数据库侧无法转换成表的DML语句,我们也可以通过开发者准备的程序,转换成表的DML语句,也可以实现对视图的DML。那就是“INSTEAD OF 触发器”
‘伍’ SQL中视图的创建。修改,删除
1、创建视图
CREATE [OR REPLACE] VIEW 视图名(列1,列2...)
AS SELECT (列1,列2...)
FROM ...;
[WITH [CASCADED|LOCAL] CHECK OPTION]
(5)sql更新视图扩展阅读:
SQL语言基本上独立于数据库本身、使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。
可以看出标准化的工作是很有意义的。早在1987年就有些有识之士预测SQL的标准化是“一场革命”,是“关系数据库管理系统的转折点”。
数据库和各种产品都使用SQL作为共同的数据存取语言和标准的接口,使不同数据库系统之间的互操作有了共同的基础,进而实现异构机、各种操作环境的共享与移植。
参考资料:网络-SQL
‘陆’ SQL中视图的创建。修改,删除
创建视图
CREATE [OR REPLACE] VIEW 视图名(列1,列2...)
AS SELECT (列1,列2...)
FROM ;
[WITH [CASCADED|LOCAL] CHECK OPTION]
修改视图
CREATE OR REPLACE VIEW 视图名 AS SELECT [ ] FROM [ ];
[WITH [CASCADED|LOCAL] CHECK OPTION]
删除视图
drop view 视图名称
(6)sql更新视图扩展阅读:
查看视图
show tables;
desc 视图名
查看视图定义
show create view 视图名称G
通过视图变更数据
insert into 视图名
update 视图名
[WITH [CASCADED|LOCAL] CHECK OPTION] 决定了是否允许更新数据记录不再满足视图的条件。
local只要满足本视图的条件就可以更新
cascaded则必须满足所有针对该视图的所有视图的条件才可以更新,默认是cascaded。
为了防止通过视图修改导致数据无故丢失,建议加上WITH CHECK OPTION
参考资料来源:网络-SQL语句
‘柒’ sql中修改了基本表的数据视图也会自动随之修改吗
本期我们用 MySQL 提供的 DBUG 工具来研究 MySQL 的 SQL 处理流程。
起手先造个实例
本次实验中,我们借助了 MySQL 的 DBUG 包,来让 MySQL 将处理过程暴露出来。MySQL 中类似的技术还有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。
这些技术将 MySQL 的不同方向的信息暴露出来,方便大家理解其中机制。