精华内容
下载资源
问答
  • --删除视图 --删除视图只是删除视图定义,并不会删除基表的数据。 --只有视图所有和具备DROP VIEW权限的用户可以删除视图。 --视图删除后,基于被删除的其他视图或应用无效。 ...

    --删除视图
    --删除视图只是删除视图的定义,并不会删除基表的数据。
    --只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
    --视图被删除后,基于被删除的其他视图或应用无效。

    展开全文
  • Oracle视图

    2020-03-25 14:54:10
    文章目录一、视图的概念二、创建视图三、视图的状态四、删除视图五、视图的其它知识六、版权声明 一、视图的概念 视图是基于一个或者多个表上的预定义查询,这些表称为基表,从视图中查询数据的方法与从基表中查询...

    一、视图的概念

    视图是基于一个或者多个表上的预定义查询,这些表称为基表,从视图中查询数据的方法与从基表中查询数据的方法相同。视图是一个查看数据的窗口,是查询语句模板,视图本身没有数据,在数据库中只保存了视图的定义。

    视图具有以下优点:

    1)可以向数据访问者只开放访问视图的权限,屏蔽基表信息。

    2)可以将复杂的查询语句保存为视图,简化了SQL语句的编写。

    3)创建视图的时候,可以限制只访问基表中的部分列或者部分行的数据,这样可以实现一定的安全性。

    4)简化用户权限的管理,只授予用户使用视图的权限。

    5)从基表中按一定的业务逻辑抽出用户关心的部分数据创建视图,简化了业务逻辑。

    二、创建视图

    语法:

    create [or replace] [{force|noforce}] view 视图名
    as
    select查询语句
    [with read only]
    

    语法解析:

    or replace:如果视图已经存在,则替换旧视图。

    force:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。

    noforce:如果基表不存在,无法创建视图,该项是默认选项。

    with read only:默认可以通过视图对基表执行增删改操作,with read only强调这是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

    示例一,在超女表中创建一个简单的视图V_GIRL,只提取编号、姓名、身材和颜值字段。

    create or replace noforce view V_GIRL
    as
    select id,name,sc,yz from T_GIRL
    with read only;
    

    从V_GIRL视图中查询数据:

    在这里插入图片描述

    示例二,连接EMP表和DEPT表创建视图V_EMPDETAIL,隐藏了工资(sal)和备注(comm)字段。

    create or replace view V_EMPDETAIL
    as
    select empno,ename,job,hiredate,EMP.deptno,dname
      from EMP join DEPT on EMP.deptno=DEPT.deptno
    with read only;
    

    从V_EMPDETAIL视图中查询数据:

    在这里插入图片描述

    三、视图的状态

    当创建视图后,Oracle会验证视图的有效性,如修改了基本表,可能会导致视图的不可用,数据字典的USER_OBJECTS的status字段中记录了视图的状态(VALID-有效;INVALID-失效)。

    在这里插入图片描述

    我们来做一个测试。

    1)删除T_GIRL表的name字段。

    alter table T_GIRL drop column name;
    

    2)执行一次查询视图,出现了错误。

    在这里插入图片描述

    3)查询视图的状态,成了INVALID。

    在这里插入图片描述

    4)在T_GIRL表中增加name字段。

    alter table T_GIRL add name varchar2(30);
    

    5)查询视图的状态,还是INVALID,数据结构已恢复,但视图的状态未恢复。

    在这里插入图片描述

    6)执行一次查询,视图已恢复正常。

    在这里插入图片描述

    7)再查询视图的状态,恢复成了VALID。

    在这里插入图片描述

    在上面的测试中,我们发现基表数据结构的改变导致了视图无效,数据结构恢复后,视图能自动恢复正常(中间有一点曲折)。

    四、删除视图

    语法:

    drop view 视图名;
    

    示例:

    drop view V_GIRL;
    

    五、视图的其它知识

    视图还有两个方面的知识,大家可以了解一下:

    1)本文只介绍了只读视图,对视图只会执行select操作,其实视图还可以进行增、删、改操作,但应用场景极少,二十年来,我从未见过。

    2)本文介绍的视图是查询数据的窗口、是虚拟表、是SQL模板,视图本身没有数据,但是,有一种视图叫物化视图,是有数据的,但是,物化视图的应用也非常少。

    六、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
    来源:C语言技术网(www.freecplus.net)
    作者:码农有道

    如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

    展开全文
  • 接着我上一篇的写,在这感觉到哇 内容好多... 添加或删除约束,但是不能修改约束  有效化或无效化约束  添加not null 约束要用 modify语句    添加非空约束:下面是emp1 表的表结构,id是 有非空约束的  ...

    接着我上一篇的写,在这感觉到哇 内容好多啊   上一篇,纯手打滴,希望给个赞!

     

    添加约束的语法:

        使用 alter table

          添加或删除约束,但是不能修改约束

          有效化或无效化约束

          添加not null 约束要用 modify语句

        

          添加非空约束:下面是emp1 表的表结构,id是 有非空约束的

          

          我们为name 也添加非空约束

          alter table emp1 modify(name varchar2(20) not null);  在更改的同时也可以更改他的类型和长度

            

          在我们删除约束的时候是根据 约束名 来删除的,drop column 是删除一列。drop constraint 是删除约束,我们来把 id 的 not null 约束删除掉

            alter table emp1 drop constraint SYS_C007430;     后面的 SYS_C007430 是约束名

             

          添加唯一约束:unique ,这里添加约束是用的 add ,只有not null 是用的 modify,更改id 为唯一约束

           alter table emp1 add constraint emp1_id_uk unique (id);

            

          有效化与无效化:就是使约束禁用和启用,在alter  table 中使用disable子句将约束无效化

            表中name为非空约束,这时候插入新的值如果为null是插入失败的,这时候我们可以使name 的非空约束无效化

             alter table emp1 disable constraint SYS_C007431;  使name列的非空约束无效化,不会删除此约束,只是禁用了

              这时候插入name为空的时候就可以插入进去:insert into emp1 values (1,null,'2',2);

                

             恢复他的约束功能: 刚才name插入的一条空值,我们如果想恢复他的非空约束的话,我们必须更新一下name不能为空或者直接删除此行才可以恢复他的非空约束

                这是没有删除或者更改name为空的时候更改约束的错误:alter table emp1 enable constraint SYS_C007431;

                

                删除name为空的行之后,就可以用上面的更改约束的sql来 恢复name 的非空约束了

          查询表上的约束

            -----约束名。约束类型。约束条件--表名必须大写!!!!!!
            select constraint_name,constraint_type,search_condition
                  from user_constraints where table_name = 'EMP1';

          查询定义约束的列,-表名必须大写!!!!!!

                  select constraint_name,column_name from user_cons_columnS where table_name = 'EMP1';

      

        视图

    视图:从表中抽出的逻辑上相关的数据集合,视图是一个虚表,视图建立在已有表的基础上,视图赖以建立的这些表成为基表,

        视图的好处:可以控制数据访问,简化查询,避免重复访问相同的数据

        

        用的两个表的关联信息,此表的创建sql 来自 尚硅谷培训机构的宋红康老师 的Oracle课程中的提供的资料  链接

          

        我们来创建视图: 创建一个名为employees_view的视图  创建视图的方式和创建表的方式一样,一个create table  一个 create view ,目前理解的是,查询出来的记录作为视图的结构及数据

          create view employees_view as
            select employee_id,last_name,salary,department_name
            from employees e,departments d
            where e.department_id = d.department_id;

          创建好的视图,对视图上的更改会映射到对应的表中的值,表中的值也会相应的更改,就好比如  复印纸如视图,白纸如 基表,在复印纸上写的东西,会覆盖掉复印纸下面白纸的内容,视图与基表中对应的数据永远        一致

          查询基表中employee_id 为101 的员工的信息

            select employee_id,last_name,salary,department_name from employees e,departments d where e.department_id = d.department_id and employee_id = 101; 

            

            我们来查看视图中此员工的信息

            select employee_id,last_name,salary,department_name from employees_view where employee_id = 101; 从这也可以看出来,视图提供了查询的方便

            

            上面基表中的与视图中的数据一样,我们来更改视图中员工的工资salary 为20000,update employees_view set salary = 20000 where employee_id = 101; 执行后的表数据

            

            我们不对基表做修改,再次查询基表,此时基表的数据跟着改变了

            

     

    修改视图:使用cheate or replace view 子句 修改视图

        使用这个可以更改我们的视图的结构,如我们把employees_view中的employee_id列去掉,但是会覆盖掉原来的视图

            create or replace view employees_view as  select last_name,salary,department_name
            from employees e,departments d
            where e.department_id = d.department_id;相较于上面创建视图只是去掉了我们想去掉的employee_id列

            

    可以选择with read only 选项屏蔽对视图的DML操作

        我们可以使用这个方法对视图进行操作,使被操作的视图不能被增删改,只允许用户查询了,我们只需要在创建更改视图的时候在末尾加上这个约束就可以 

          create or replace view employees_view as  select last_name,salary,department_name
            from employees e,departments d
            where e.department_id = d.department_id with read only;

          当我们修改视图结束后,再次对修改过后的视图进行增删改的时候就会出现错误

            

          

     

        简单视图与复杂视图:创建视图中用到组函数了就是复杂视图。没有的话就是简单视图

          

          创建一个复杂视图:将每个部门的工资和部门名创建试图

            create or replace view dept_sal_view as
                  select d.department_name ,avg(salary) avg_sal        --在这必须要给组函数列娶一个别名,因为是查出来,Oracle并不知道这一行叫什么
                  from employees e ,DEPARTMENTS d
                  where e.department_id = d.department_id
                  group by department_name
                  with read only;

            

            一般复杂视图是不允许进行增删改的操作的,拿上上面举例,两列都是通过函数来得出的值,如果更改一个avg_sal ,但是他是很多数算出来的,数据库就不知道该改哪个值了,所以会报错

              

          删除视图:drop view + 视图名   

     

      Top-N分析:查询一个列中最大或者最小的n个值,最大和最小的值的集合是Top-N分析所关心的:例如?销售量最高的十中产品是什么

          在Oracle中,rownum是对查询出来的数据进行一个数字排序的伪列。对于rownum的具体描述可以看这个帖子  超牛皮的大神rownum
          里面可以说讲的很详细了。就不多说了。我也去学习学习。

              查询工资排名 10 到 20 的员工信息

               select rn , last_name,salary from (
                    select rownum rn,last_name,salary from (
                        select employee_id,last_name,salary from employees order by salary desc) ) where rn >10 and rn<20;

     

      序列:提供标识一行的唯一标识,类似sql中的自增长主键列,

          创建一个序列  ,这样就会创建一个名为emp_sql的序列

            create sequence emp_sql
            increment by 1 --每次增长1
            start with 10 --从10开始
            maxvalue 10 --最大值 10
            cycle --是否循环
            nocache --是否缓存 不缓存

          查看序列:select emp_sql.nextval (currval) from dual;

              首次查询注意不能直接使用currval来获取当前值,应先使用nextval或取下一个值,此时序列才会由当前值的存在,否则报错 :尚未在此会话中定义

              我们每次运行序列都会自增长一个,到 设置的最大值10会循环到1 继续开始

          更改序列:alter sequence emp_sql increment by 2 nocycle;  更改为每次增长2 ,不循环,这时候只要到了他的最大值的话,如果不循环就会爆出错误

              

          改变序列的初始值,只能通过删除此序列然后在创建才可以修改 

          序列在下列情况下出现裂缝

            --回滚

            --系统异常

            --多表同时使用同一个序列

          如果不将序列的值装入内存,可使用表user_sequences查看当前序列的有效值,select sequence_name,min_value,max_value,increment_by,last_number from user_sequences;

          删除序列:drop sequence + name  就能删除序列了

      

      索引:索引就是提高查询速度的,类似字典的索引,一旦用户创建了索引,用户就不需要维护和指定去调用索引了,一切交给系统维护,当表删除时,相应表上的索引也会被清空

        创建索引:自动创建:在定义primary key 或者unique 约束后,系统会自动在相应的列上创建唯一性索引

             手动创建:用户可以在其他列上创建非唯一的索引,以加快查询速度

              create index index_in on jobs(min_salary);   create index 索引名 on 表名(表中列名);

        删除索引:drop index + name

        什么时候创建索引:

            列中数据值分布很广

            列经常在where 子句或连接条件中出现

            表经常被访问而且数据量很大,访问的  数据大概占数据总量的2% 到 4%

      同义词:同义词可以为表起一个名,这个名区别与起别名,用表名和同义词查询同样有效

          当查询employees 表我们只能这么输入 : select * from employees;

          我们为这个表起一个同义词:create synonym e for employees;   用e来代表employees

          这时候我们就可以这么查询了 select * from e;

          删除同义词,  drop synonym + 名,

     

    转载于:https://www.cnblogs.com/wzqjy/p/7772720.html

    展开全文
  • 更改定义 通过DEFINER从转储中删除任何语句,这在最初导入数据库对象时最容易做到。稍后更改定义器比较棘手:如何更改视图定义器 运行此SQL生成必要的ALTER语句SELECT CONCAT("ALTER DEFINER=youruser@host VIE...

    当将视图/触发器/过程从一个数据库或服务器导出到另一个数据库或服务器时,通常会发生这种情况,因为创建该对象的用户不再存在。

    您有两种选择:

    1.更改定义 通过DEFINER从转储中删除任何语句,这在最初导入数据库对象时最容易做到。

    稍后更改定义器比较棘手:

    如何更改视图的定义器 运行此SQL生成必要的ALTER语句

    SELECT CONCAT("ALTER DEFINER=youruser@host VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name'; 复制并运行ALTER语句

    如何更改存储过程的定义器 例:

    UPDATE mysql.proc p SET definer = 'user@%' WHERE definer='root@%' 注意,因为这将更改所有数据库的所有定义器。

    2.创建丢失的用户 如果在使用MySQL数据库时发现以下错误:

    The user specified as a definer ('someuser'@'%') does not exist` 然后,您可以使用以下方法解决此问题:

    GRANT ALL ON . TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES; 从http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

    这就像一种魅力-只需更改someuser为丢失用户的名称即可。在本地开发服务器上,您通常可以使用root。

    还要考虑您是否实际上需要授予用户ALL权限,或者他们是否可以减少权限。来源:stack overflow

    展开全文
  • Oracle创建视图(View)

    2018-12-06 14:14:23
    其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS 得到相关信息。 修改视图: 通过OR REPLACE 重新创建同名视图即可。 视图上的DML 操作: DML操作应遵循的原则: 1.简单视图可以执行...
  • 观察模式

    2019-06-13 10:39:11
    观察模式(有时又被称为模型(Model)-视图(View)模式、源-收听(Listener)模式或从属模式)是软件设计模式的一种。 在此种模式中,一个目标物件管理所有相依于它的观察物件,并且在它本身的状态改变时主动...
  • 20.观察模式

    2020-08-17 15:20:00
    1.什么是观察模式? 定义对象之间的一种一对多的依赖...在目标中定义了一个观察集合,一个观察目标可以接受任意数量的观察来观察,它提供一系列方法来增加和删除观察对象,同时它定义了通知方法notify()。 .
  • 又称为发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听(Source-Listener)模式、或从属(Dependents)模式 二、观察模式结构图   三、观察模式中主要角色 抽象主题(Subject)...
  • 观察模式属于设计模式三大类别中的行为型模式...抽象主题:它是对所有观察的聚集,它定义了添加观察删除观察,以及通知所有观察的接口 具体主题:它是对抽象主题的继承或者实现,它有自己的一个具体的内部
  • 观察模式:是对象的行为模式,又叫发布订阅模式,模型视图模式,源监听模式或者从属模式。 观察模式定义了一种一对多的依赖关系,让多个观察对象同时监听某个主题对象,这个主题对象在状态上发生变化,会通知...
  • 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新【GOF95】 又称为发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听(Source-...
  • mysql版本 ...在导入数据库文件时,视图定义者为原来的定义者,在以新的数据库用户访问视图时,会报上述错误,xxx为视图的原定义用户 解决办法 1.删除视图,重新创建视图 2.批量修改视图的definer ...
  • (1)Subject(目标)目标又称为主题,是指被观察的对象,目标类中定义一个观察集合,可以接受任意数量的观察来观察,提供一系列方法来增加或者删除观察对象,同时定义了通知方法nofity(),其可以是接口,...
  • 目的 定义了对象之间一对多(或者一对一)的联动,及一个对象的状态或者行为的变化能够导致其他对象状态或者...它定义了一个观察的集合,可以增加、删除某个观察,同时定义了一个通知方法。 ConcreteSubject(具...
  • 通过数据集合类的对象或视图对象对数据进行增加或删除操作,将变化后的数据及时在视图中和数据集合对象中更新。 三、实验原理 (1)观察模式的定义: 指多个对象间存在一对多的依赖关系,当一个对象的状态...
  • 1.观察模式 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。...抽象主题(Subject):该角色是一个抽象类或接口,定义了增加、删除、通知观...
  • 设计模式-观察模式

    2020-01-04 19:42:07
    ​ 也叫发布-订阅模式、模型-视图模式、源-监听器模式、从属模式,一个对象发送改变时将自动通知其他对象,其他对象将相应做出反应。发生改变的对象叫做观察目标,被通知的对象称为观察,一个观察目标可以对应...
  • 机房收费系统之观察模式

    千次阅读 热门讨论 2013-05-17 21:45:04
     观察模式:(有时又被称为发布-订阅模式、模型-视图模式、源-收听模式或从属模式)他定义一种一对多的依赖关系,让多个观察对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察...
  • 定义 观察(Observer)模式的定义:指多个对象...抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察对象的聚集类和增加、删除观察对象的方法,以及通知所有观察的抽象方法 具体主题(Con...
  • 1.抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察对象的聚集类和增加、删除观察对象的方法,以及通知所有观察的抽象方法。 2.具体主题(Concrete Subject)角色:也叫具体目标类,它实现...
  • 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新【GOF95】 又称为发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听(Source-...
  • (1)数据库系统RDS:关系型,oracle,mysql,mariaDB,percona server ,DB2NoSQL:Redis,MongoDB,memcache(2)SQL语言:结构化查询语言DDL语句 数据定义语言:数据库丶表丶视图丶索引丶存储过程丶函数丶create drop...
  • --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE...
  • java初学必看

    热门讨论 2012-02-24 16:07:34
    2.6.3 Eclipse的视图(View) 2.6.4 Eclipse的编辑器 2.6.5 Eclipse的工具栏和菜单栏 2.6.6 使用Eclipse编写HelloWorld程序 2.7 本章习题 第3章 Java语言基础 3.1 标识符 3.1.1 标识符的概念 3.1.2 变量命名...
  • SQL的数据定义功能非常广泛,一般包括数据库的定义、表的定义视图定义、存储过程的定义、规则定义等,今天主要介绍模式、表的定义。1.模式的定义删除 模式本身就是数据库中的一个对象。它可以使用create ...
  • SQL的数据定义功能非常广泛,一般包括数据库的定义、表的定义视图定义、存储过程的定义、规则定义等,今天主要介绍模式、表的定义。1.模式的定义删除 模式本身就是数据库中的一个对象。它可以使用create ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 216
精华内容 86
关键字:

视图定义者删除