社区
疑难问题
帖子详情
怎样实现基表更新时视图也随着更新
menggangxiang
2007-10-02 02:48:46
各位老师好:
当客户端显示一个视图时,怎样实现当基表更新时视图的内容也随着改变?
用连接视图的dataset控件close后再open的方法不用再介绍。
请各位老师指导。
...全文
487
4
打赏
收藏
怎样实现基表更新时视图也随着更新
各位老师好: 当客户端显示一个视图时,怎样实现当基表更新时视图的内容也随着改变? 用连接视图的dataset控件close后再open的方法不用再介绍。 请各位老师指导。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
中国风
2007-10-03
打赏
举报
回复
视图更新:
指的是结果集,而不是更新语句。。
go
先运行视图,再对表数据操作,不会影响操作之前执行的结果集。。
程序读数据可首先读在内存中。。。
go
gfgen
2007-10-03
打赏
举报
回复
视图是不需要更新的,在用视图时SQL自动执行视图的SELECT语句,基表数据变化后视图数据在读视图时数据就会变化,包括索引视图也是如此,不同的是索引视图在插入或删除记录后会马上更新视图索引,因此你说的不是视图更新的问题,而是在客户端如何和数据同步的问题,即在我打开数据集时,如果别人同时打开并修改了数据,我如何在我电脑上看到该变化?
呵呵,应该说目前没有较好的办法,除非去重新读数据库,来确定数据是否发生变化,ADO中可以用OPEN,或.Requery .Resync 进行数据同步,此外好象没有什么好办法。
dawugui
2007-10-02
打赏
举报
回复
这个说法是错误的.没有视图更新一说,只有视图的语句更新一说.
数据更新后,只要你通过视图查看数据,自然是最新的数据.
中国风
2007-10-02
打赏
举报
回复
这是一个程序事件的控制
在数据库只要是基表更新,视图就更新了。。。存在的只是时间差
视图保存的只是要执行的语句
MySQL数据库:数据
视图
概述.pptx
视图
概述 数据
视图
课程目标 理解 —— 理解
视图
的概念及存储; 了解 ——了解
视图
的优点。
视图
概述
视图
是从一个或者几个基本表或者
视图
中导出的虚拟表,是从现有
基表
中抽取若干子集组成用户的“专用表”,这种构造方式必须使用SQL中的SELECT语句来
实现
。一个原始表,根据不同用户的不同需求,可以创建N多个不同的
视图
。
视图
的概念 基本表
视图
是数据库的用户使用数据库的观点。例如,对于一个学校,其学生的情况存于数据库的一个或多个表中,而作为学校的不同职能部门,所关心的学生数据的内容是不同的。即使是同样的数据,也可能有不同的操作要求,于是就可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种根据用户观点所定义的数据结构就是
视图
。 基本表 用户一
视图
基本表 用户二
视图
视图
概述
视图
概述
视图
的存储 与表不同,
视图
不会要求分配存储空间,
视图
中也不会包含实际的数据。在定义一个
视图
时
,只是把其定义存放在数据库中,并不直接存储
视图
对应的数据,
视图
中的数据是从
基表
中获取,这些数据在
视图
被引用
时
动态的生成。由于
视图
基于数据库中的其他对象,因此一个
视图
只需要占用数据字典中保存
Oracle创建
视图
(View)
视图
:是基于一个表或多个表或
视图
的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。
视图
基于的表称为
基表
,Oracle的数据库对象分为五种:表,
视图
,序列,索引和同义词。
视图
是存储在数据字典里的一条select语句。通过创建
视图
可以提取数据的逻辑上的集合或组合。
视图
的优点: 1.对数据库的访问,因为
视图
可以有选择性的选取数据库里的一部分。 2.用户通过简单的查询可以从复杂查询中得到结果。 3.维护数据的独立性,试图可从多个表检索数据。 4.对于相同的数据可产生不同的
视图
。
视图
分为简单
视图
和复杂
视图
: 1、简单
视图
只从单表里获取数据,复杂
视图
从多表; 2、简单
视图
不包含函数和数据组,复杂
视图
包含; 3、简单
视图
可以
实现
DML操作,复杂
视图
不可以。 语法结构:创建
视图
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 语法解析: OR REPLACE :若所创建的试图已经存在,则替换旧
视图
; FORCE:不管
基表
是否存在ORACLE都会自动创建该
视图
(即使
基表
不存在,也可以创建该
视图
,但是该
视图
不能正常使用,当
基表
创建成功后,
视图
才能正常使用); NOFORCE :如果
基表
不存在,无法创建
视图
,该项是默认选项(只有
基表
都存在ORACLE才会创建该
视图
)。 alias:为
视图
产生的列定义的别名; subquery :一条完整的SELECT语句,可以在该语句中定义别名; WITH CHECK OPTION :插入或修改的数据行必须满足
视图
定义的约束; WITH READ ONLY :默认可以通过
视图
对
基表
执行增删改操作,但是有很多在
基表
上的限制(比如:
基表
中某列不能为空,但是该列没有出现在
视图
中,则不能通过
视图
执行insert操作),WITH READ ONLY说明
视图
是只读
视图
,不能通过该
视图
进行增删改操作。现实开发中,基本上不通过
视图
对表中的数据进行增删改操作。 案例3:基于EMP表和DEPT表创建
视图
代码演示:
视图
SQL> CREATE OR REPLACE VIEW EMPDETAIL 2 AS 3 SELECT EMPNO,ENAME,JOB,HIREDATE,EMP.DEPTNO,DNAME 4 FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO 5 WITH READ ONLY 6 / VIEW CREATED SQL> SELECT * FROM EMPDETAIL; ① EMPNO ENAME JOB HIREDATE DEPTNO DNAME 7369 SMITH CLERK 17-12月-80 20 RESEARCH 7499 ALLEN SALESMAN 20-2月 -81 30 SALES 7521 WARD SALESMAN 22-2月 -81 30 SALES 7566 JONES MANAGER 02-4月 -81 20 RESEARCH 7654 MARTIN SALESMAN 28-9月 -81 30 SALES 7698 BLAKE MANAGER 01-5月 -81 30 SALES 7782 CLARK MANAGER 09-6月 -81 10 ACCOUNTING 7788 SCOTT ANALYST 19-4月 -87 20 RESEARCH 7839 KING PRESIDENT 17-11月-81 10 ACCOUNTING 7844 TURNER SALESMAN 08-9月 -81 30 SALES 7876 ADAMS CLERK 23-5月 -87 20 RESEARCH 7900 JAMES CLERK 03-12月-81 30 SALES 7902 FORD ANALYST 03-12月-81 20 RESEARCH 7934
浅谈MySql
视图
、触发器以及存储过程
视图
什么是
视图
?
视图
的作用是什么?
视图
(view)是一种虚拟存在的表,是一个逻辑表,它本身是不包含数据的。作为一个select语句保存在数据字典中的。 通过
视图
,可以展现
基表
(用来创建
视图
的表叫做
基表
base table)的部分数据,说白了
视图
的数据就是来自于
基表
。
视图
的优点: 简单:使用
视图
的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。 安全:使用
视图
的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过
视图
就可以简单的
实现
。 数据独立:一旦
视图
的结构确定了,可以屏蔽表结构变化对用户的
mysql触发器
实现
oracle物化
视图
示例代码
oracle数据库支持物化
视图
–不是基于
基表
的虚表,而是根据表实际存在的实表,即物化
视图
的数据存储在非易失的存储设备上。 下面实验创建ON COMMIT 的FAST刷新模式,在mysql中用触发器
实现
insert , update , delete 刷新操作 1、基础表创建,Orders 表为
基表
,Order_mv为物化
视图
表 代码如下: mysql> create table Orders( -> order_id int not null auto_increment, -> product_name varchar(30)not null, -> price decimal(10,0)
sql总结.doc
1、索引 ·什么是索引 ·索引的基本原理 ·索引的基本写法 ·索引的分类 ·索引的作用 ·索引的优缺点 ·索引的建立原则 2、存储过程 ·什么是存储过程 ·存储过程的基本写法 ·存储过程的作用 ·存储过程的优缺点 ·存储过程的应用场景 3、触发器 ·什么是触发器 ·触发器的的基本写法 ·触发器的功能 ·触发器的优缺点 ·触发器的两种形式 ·触发器的应用场景 4、
视图
·什么是
视图
·
视图
的基本写法 ·
视图
在哪些情况下不能被增、删、改 ·
视图
的作用 ·
视图
的优缺点 ·
视图
的应用场景 5、游标 ·什么是游标 ·游标的作用 ·游标的分类 ·游标的基本用法 ·使用游标的优缺点 ·什么
时
候选择使用游标 1、 (1)索引是对数据库表中一列或多列进行排序的一种结构。 (2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树
实现
注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立索引。聚簇索引包括主键索引和二级索引(二级索引是在对非主键字段建立索引后,通过索引找到对应这个非主键字段的主键,再进行主键索引,找到B+树中叶子结点);(聚簇索引B+树中叶子结点存放的是数据和指向下一条数据的指针) 非聚簇索引:对主键和非主键字段建立索引
时
,直接找到B+树中的叶子结点,B+树中叶子结点存放的是对应数据的地址,并通过地址找到数据。 (3)Create index 索引名 on 表名(字段名) (4)索引分为聚簇索引和非聚簇索引 (5)索引的作用 1.创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2.可以加大数据的检索速度,这也是创建索引的主要原因。 3.可以加速表与表之间的连接效率。 4.在分组排序
时
使用索引,可以减少分组排序的
时
间。 (6)索引的优缺点 索引的优点既索引的作用。 索引的缺点:1.建立索引会产生占据一定的空间。2.对表中的数据进行增、删、改的
时
候,索引也要动态的维护,这就降低了整数的维护速度。 (7)索引的建立原则 1.主外键 2.经常被查询的列 3.用于连接的字段 4.排序分组的字段 2、存储过程 (1)什么是存储过程? 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 (2)存储过程的基本写法(oracle) Create or replace procedure 名称(参数) Is/as (变量的赋值例如:(a name%type)(a varchar(2))) Begin Sql语句以及判断条件 End 名称; (3)存储过程的作用 1.存储过程只在创造
时
进行编译,以后每次执行存储过程都不需再重新编译,而 一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速 度。 2.当对数据库进行复杂操作
时
(如对多个表进行 Update,Insert,Query,Delete
时
),可将此复杂操作用存储过程封装起来 与数据库提供的事务处理结合一起使用。 3.存储过程可以重复使用,可减少数据库开发人员的工作量。 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。 (4)存储过程的优缺点 优点: 作用的四条加上 1.分布式工作。 应用程序和数据库的编码工作可以分别独立进行,而不会相互影响。 缺点:1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要
更新
程序集中的代码以添加参数、
更新
GetValue() 调用,等等,这
时
候估计比较繁琐了。 2.可移植性差 由于存储过程将应用程序绑定到数据库,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。 (5)存储过程的应用场景 1.通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多
时
,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。 3、触发器 (1)什么是触发器 在Oracle中,触发器是一种特殊的存储过程,也是由一组sql语句以及一些业务逻辑代码组成的。数据库可以通过增、删、改来触发触发器。 (2)触发器的基本写法 create or replace trigger tri_adddept AFTER INSERT on dept For each row //表级不用加 declare begin dbms_output.put_line('插入了新部门'); end ; (3)触发器的功能 1.配合sequence
实现
自增(oracle) 2.提供审计和日志记录 3.写复杂的业务逻辑代码 (4)触发器的优缺点 优点: 1.
实现
级联更改 2.能过
实现
比check更严格的约束,与CHECK 约束不同,触发器可以引用其它表中的数据。通过其他表中的数据的变化来设置更加复杂的约束。 缺点:滥用触发器会造成数据库及应用程序的维护困难。 (5)触发器的两种形式(行级触发器,表级触发器) 1.在语法上,行级触发器就多了一句话:for each row 2.在表现上,行级触发器,在每一行的数据进行操作的
时
候都会触发。 语句级触发器,对表的一个完整操作才会触发一次。 简单的说:行级触发器,是对应行操作的;语句级触发器,是对应表操作的。 (6)应用场景 作用+优点 4、
视图
(1)什么是
视图
?
视图
(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即
视图
名字。
视图
本身并不包含任何数据,它只包含映射到
基表
的一个查询语句,当
基表
数据发生变化,
视图
数据也随之变化。 (2)
视图
的基本写法 Create view
视图
名 as select * from emp; (3)
视图
在哪些情况下不能被增、删、改 (1)若
视图
的字段是来自字段表达式或常数,则不允许对此
视图
执行INSERT、UPDATE操作,允许执行DELETE操作; (2)若
视图
的字段是来自库函数,则此
视图
不允许
更新
; (3)若
视图
的定义中有GROUP BY子句或聚集函数
时
,则此
视图
不允许
更新
; (4)若
视图
的定义中有DISTINCT任选项,则此
视图
不允许
更新
; (5)若
视图
的定义中有嵌套查询,并且嵌套查询的FROM子句中涉及的表也是导出该
视图
的
基表
,则此
视图
不允许
更新
; (6)若
视图
是由两个以上的
基表
导出的,此
视图
不允许
更新
; (7)一个不允许
更新
的
视图
上定义的
视图
也不允许
更新
; 本表的行列子集
视图
一般是可
更新
的。若
视图
的属性来自集函数、表达式,则该
视图
肯定是不可以
更新
的。 (4)
视图
的作用 1、
视图
隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。 2、
视图
提供了一个统一访问数据的接口。(即可以允许用户通过
视图
访问数据的安全机制,而不授予用户直接访问底层表的权限) 3、从而加强了安全性,使用户只能看到
视图
所显示的数据。 4、
视图
还可以被嵌套,一个
视图
中可以嵌套另一个
视图
。 (5)
视图
的优缺点 优点:1.简单性。
视图
不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为
视图
,从而使用户不必为以后的操作每次都指定全部的条件。 2.安全性。通过
视图
用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过
视图
,用户可以被限制在数据的不同子集上。 3. 逻辑数据独立性。
视图
可以使应用程序和数据库表在一定程度上独立。如果没有
视图
,应用一定是建立在表上的。有了
视图
之后,程序可以建立在
视图
之上,从而程序与数据库表被
视图
分割开来。 缺点:1.如果这个
视图
是由一个复杂的多表查询所定义,那么,即使是
视图
的一个简单查询,也要花费一定的
时
间。 2.修改限制:当用户试图修改
视图
的某些行
时
,数据库必须把它转化为对基本表的某些行的修改。对于简单
视图
来说,这是很方便的,但是,对于比较复杂的
视图
,可能是不可修改的。 (6)
视图
的应用场景 1.访问频繁,
更新
少的一组数据 2.需要对一些数据限制访问权限
时
5、游标(cursor) (1)什么是游标 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。 (2)游标的作用 游标的一个常见用途就是保存查询结果,以便以后使用。 (3)游标的分类 游标分为显示游标和隐式游标 隐式游标:是用户操作SQL
时
自动生成的,而显式游标是在声明块中直接定义的游标。 (4)游标的基本用法 通过ROWCOUNT查看游标指向的行:(隐式游标实例) 例: DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count from dept; --返回一个隐式游标 dbms_output.put_line('SQL%ROWCOUNT = '||SQL%COUNT); END; / 执行结果:SQL%ROWCOUNT = 1 (显式游标基本) DECLARE CURSOR mycur IS SELECT * FROM dept; deptinfo dept%ROWTYPE; BEGIN IF mycur%ISOPEN THEN NULL; ELSE OPEN mycur; END IF; LOOP FETCH mycur INTO deptinfo; EXIT WHEN mycur%NOTFOUND; dbms_output.put_line('部门名称:'||deptinfo.dname); END LOOP; END; (配合for) DECLARE CURSOR mycur IS SELECT * FROM dept; deptinfo dept%ROWTYPE; BEGIN For test in mycur loop EXIT WHEN mycur%NOTFOUND; dbms_output.put_line('部门名称:'||test.dname); END LOOP; END; (5)游标的优缺点 优点: 游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作; 它还提供对基于游标位置而对表中数据进行删除或
更新
的能力 缺点: 处理大数据量
时
,效率低下,占用内存大 (6)什么
时
候选择使用游标? 一般是在循环处理的
时
候使用。 比如你判断一个班上的同学数学成绩怎么样,你就可能用游标,先把全部的成绩查询到游标中,之后再循环一条条进行判断处理。
疑难问题
22,209
社区成员
121,731
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章