精华内容
下载资源
问答
  • oracle数据库对象--表和视图

    千次阅读 2018-01-23 17:08:50
    oracle数据库对象–表和...表是作为oracle数据库存储数据的一种数据结构,就相当于我们java中用集合list,或者数组存储我们的数据一样,表是一种二维结构,列,我们把相同类型的数据归为一列,比如每个

    oracle数据库对象–表和视图

    表与视图是oracle数据库对象中最基本的也是最主要的两个对象,在开发应用中使用的也是最多的。该篇主要针对这两点对表和视图的一些操作(DDL,DML)进行介绍。

    1.表

    表是作为oracle数据库存储数据的一种数据结构,就相当于我们在java中用集合list,或者数组存储我们的数据一样,表是一种二维结构,有行 有列,我们把相同类型的数据归为一列,比如每个人都有姓名,我们就把姓名归为一列,年龄归为一列,而行对应着每个人的数据,比如第一行是小红的姓名和年龄,第二行是小强的姓名和年龄。通过创建表然后向表中插入数据,最终实现对信息的存储。
    下面将介绍一下对表操作的一些sql语句:

    (1)、创建表

    1.第一种方式直接创建
    
    create table table_name(
    字段名1 字段类型 【约束】,
    字段名2 字段类型 【约束】,
    字段名3 字段类型 【约束】--其中【】代表该项可写可不写
    )
    --eg创建用户表,要求字段有用户编号,姓名,性别,年龄;其中编号为主键,姓名不能为空。
    create table users(
    uid number(10) primary key,
    name varchar2(10) not null,
    sex varchar2(6) check sex in('男''女'),
    age number(3)
    );
    --其中约束也是数据对象之一,下篇再对其做详细介绍
    2.通过复制的方式创建,也就是我们想要常见的表结构已经存在,我们可以拷贝原表
    create table users_2 
    as
    select *from users ;
    --如果我们只想拷贝表结构而不拷贝表数据可以在后面加上where条件 where 1=2;
    --这样我们就创建了一个新表user_2,其结构和表users表一模一样,当然我们也可以选择users表中的某些字段进行拷贝。
    
    --注意点:1.表名必须以字母开头,当然还有一些其他注意事项,我们想如果你们不是刻意的话很难涉及到的,就不说了。
    --2.在数据类型上我们了解几个orace常用的数据类型如 数字使用的是number了(size),所有的数字都可以用number表示的,
    --所以小数也不例外。字符我们通常用的是varchar2(size),在mysql用的就是varchar(size),时间用date ,二进制文件
    --如图片数据用blob.其他数据类型则根据需要再去了解。

    (2)、删除表

    --删除表就较为简单,记得语法结构就行。
    第一种删除表数据,保留表结构
    (1)delete from users;
    --DELETE FROM TABLE_NAME;
    --这种方法会删除表中所有数据,但是会保留表的结构,但是不会释放表之前所占有的存储空间,可以执行回滚操作。
    --将所有已经删除的数据进行恢复
    
    (2)truncate table users;
    --TRUNCATE TABLE TABLE_NAME;
    --这种方法也可以删除表数据,保留表的结构,但是这里比delete方法更彻底一点在于,其会将表的存储空间设为初始值,且
    --操作之后无法回滚。
    
    第二种删除表数据同时删除表结构
    drop table users;
    --DROP TABLE TABLE_NAME
    --该方法将彻底的对表进行删除,包括表数据和表结构,且不能回滚,然后回收之前占有的所有内存空间
    

    (3)、修改表结构

    前面介绍了表的创建和删除,下面将介绍当我们创建表之后,如何对表的结构进行修改。
    --添加一列(用户表添加身高一项,类型为number类型)
    alter table users add (uheight number(3));
    --ALTER TABLE TABLE_NAME ADD(COL_NAME TYPE);
    
    --删除一列(删除用户表的身高一项)
    alter table users drop column uheight;
    --ALTER TABLE TABLE_NAME DROP COLUMN COL_NAME
    
    --修改一列,将name 字段大小变为20
    alter table users modify (name varchar2(20));
    --ALTER TABLE TABLE_NAME MODIFY(COL_NAME TYPE);
    
    --重名命一列,将name重命名为username
    alter table users rename column name to username;
    --ALTER TABLE TABLE_NAME RENAME COLUMN OLD_NAME TO NEW_NAME;
    
    --修改表users名称为vipusers
    rename users to vipusers;
    --RENAME OLD_TABLENAME TO NEW_TABLENAME;
    

    以上就介绍了表的一些DDL操作,下面将介绍我们在项目中应用最多的DML语句,即数据的增删改查,这里就简单介绍一些最基本的DML操作,后文应该可能还会有关于复杂一点的DML操作,主要也就是查询那块。

    (4)、基本DML语句结构
    ---------------------------------------------添加--------------------------------------------------
    --向users表中添加一条数据
    insert into users values(1001,'黄小州','男',18);
    --INSERT INTO TABLE_ANME VALUES(VALUE1,VALUE2,VALUE3,VALUE4,...)
    
    --向users表中只插入编号,姓名,性别;
    insert into users(uid,name,sex) values(1002,'蠢小蛙','男');
    --INSERT INTO TABLE_NAME(COL_NAME1,COL_NAME2,COL_NAME3,COL_NAME4) VALUES(VALUE1,VALUE2,VALUE3,VALUE4)
    -------------------------------------------查询--------------------------------------------
    SELECT COL_NAME1,COL_NAME2,COL_NAME3 FROM TABLE_NAME WHERE ....
    --查询users表所有数据
    select * from users;
    
    --查询users表编号为1001的用户的信息
    select * from users where uid=1001;
    --查询users表用户的姓名和性别
    select name,sex from users ;
    
    查询是我们在开发中使用最多的地方,这里只是写了最简单的查询语句后文将推出更复杂的一些查询,包括多表连接查询,
    单行行数,分组函数,高级子查询等等。
    --注意,以后在复杂的一些条件查询中要遵守的一个约定就是 where语句要在 from 语句后面;
    -------------------------------------------修改------------------------------------------
    UPDATE TABLE_NAME SET COL_NAME = ? [WHERE  .....]
    
    --修改users表的编号为1001的年龄为12update users set age = 12 where uid = 1001;
    
    ------------------------------------------删除------------------------------------
    DELETE FROM TABLE_NAME WHERE COL_NAME = ?
    --删除users表所有数据
    delete from users ;
    --删除users表中姓名为黄福州的字段
    delete from users where name ='黄福州'

    2.视图

    首先我们需要了解为什么会有视图的存在,它存在的意义在哪里,之前就提过表和视图是数据库基本对象中的两个很重要的对象。可见视图的地位也是非常重要的。
    1.为什么要用视图?
    答:举个例子,对于公司人员信息表上都有他们的薪资情况,财务再根据数据库里薪资来给每个人发放工资,所以工资这一栏是非常重要的,所以为了保证运转条理性,我们一般不能让数据库管理员看到这一栏的,毕竟管理员也是员工,对于这些敏感的信息,可能他看不到对大家都好。那么就衍生了该如何解决这个问题呢,有的人会说创建一个新的员工表,里面没有员工工资一栏,但是这个方法可是非常不明智的,因为当我们把原来的数据修改之后岂不是还要再新表上还要做一次修改,而且在新表上做了修改还要更新到主表,中间就会出现很多问题的,此时利用视图则是最合理的一个方法。
    视图是从已存在表上抽出逻辑相关的数据集合,其本身和表的区别不大,都是对数据一种存储,只不过我们可以在已有表的基础上抽取一部分我们想要的数据。
    2.我们修改视图之后会更新到基表中吗?
    答:这个是肯定的,视图的意义就是对基表中的数据进行一部分提取后然后提供给其他人操作的,如果不能更新基表,那和新建一个表就毫无区别了,同时对于基表中数据的改变也能立马更新视图。

    (1)、创建视图

    视图的创建和备份一个表十分类似,就是改个关键字,从table改为view
    CREATE VIEW VIEW_NAME
    AS
    SELECT ... FROM ...TABLE_NAME WHERE ...[WITH READ ONLY]
    
    eg:
    create view users_view
    as 
    select uid,name,sex from users;
    如果期望对视图只能查看不能进行任何操作,则只需要在后面追加WITH READ ONLY
    --从创建语句来看,视图也可以理解成对select语句的一个存储。
    
    (2)、操作视图

    因为视图只是对基表数据进行一次提取存储,所以本质上和表区别不大,所以在DML语句上也没有太大区别,
    所以这里就不做详细介绍了,就是和表操作一样的,insert ,update ,delete,select,都相同。但是,很多时候视图是比我们的表要复杂了,
    比如在基表中有基本工资和奖金两个字段,而我们在新建的视图中就创建了一个新的字段用来接收这两个字段的和,总工资。对于这种视图我们就不能使用update,和insert,以及delete语句来操作视图了,因为这在逻辑上也会造成很多说不通。
    列举一下最简单的视图操作语句:

    --查询视图
    SELECT * FROM VIEW_NAME [WHERE...] 
    
    --修改视图
    1.UPDATE VIEW_NAME SET COL_NAME  = ? [WHERE ...]
    2.CREATE OR REPLACE VIEW_NAME AS
    SELECT COL_NAME1 别名,COL_NAME2 别名2,COL_NAME3 别名3 FROM TABLE_NAME [WHERE]
    
    --删除视图
    1.彻底删除
    DROP VIEW VIEW_NAME;
    2.删除数据
    DELETE FROM VIEW_NAME [WHERE ...]
    

    视图注意点:
    当视图定义中包含以下元素之一时不能使insert:
    1.组函数;
    2.GROUP BY 子句;
    3.DISTINCT 关键字;
    4.ROWNUM 伪列;
    5.列的定义为表达式;
    6.表中非空的列在视图定义中未包括。

    当视图定义中包含以下元素之一时不能使用update:
    1.组函数;
    2.GROUP BY子句;
    3.DISTINCT 关键字;
    4.ROWNUM 伪列;
    5.列的定义为表达式.

    当视图定义中包含以下元素之一时不能使用delete:
    1.组函数;
    2.GROUP BY 子句;
    3.DISTINCT 关键字;
    4.ROWNUM 伪列.

    表和视图的基本操作就介绍到这里了,这里是最基本的操作,重在了解语法结构,在真正生产过程中,对表和视图的操作远比这些复杂,下文将介绍对表查询中的复杂部分,包括单行函数和多行函数,高级子查询等。

    展开全文
  • 数据库视图

    千次阅读 2009-03-07 10:14:00
    视图有以下几方面的功能:1。简化应用程序。视图做为数据库中的一种实体,实际上存在的只是它的脚本,而它的内容并不真正的单独存在一份。一般,可以对复杂的应用程序...还有,可以把对远地数据库的访问封装在视图中,
    视图有以下几方面的功能:
    1。简化应用程序。
    视图做为数据库中的一种实体,实际上存在的只是它的脚本,而它的内容并不真正的单独存在一份。一般,可以对复杂的应用程序从功能角度进行分析,将可以与其它的应用程序共用的那一部分,分离出来。对这部分功能,视具体情况可做成不同的数据库实体(如过程),有些是可以做成视图的。这样,上层的应用程序就可以从视图中取数据了。
    还有,可以把对远地数据库的访问封装在视图中,使之对上层应用程序透明。
    2。可以对 UNION 后的记录集排序。
    直接对以下语句的结果排序,是不可能的(至少我不知道怎么直接排序)。
    select a.id id from a
    union
    select b.id id from b;
    所以把以上语句作成视图后,就可以了。设视图名为A_B:
    select id from A_B order by id;
    3。可以实现一定的权限控制。
    可以根据需要,对表中的一部分内容做一个视图,以供一定的角色使用。可以对表中的一部分记录做一个视图(纵向),也可以对一个表中的一部分字段做一个视图(横向),或二者兼而有之。
    暂时想了这么多,希望大家多多指正与补充。
    --------------------------------------------------------------------
    视图 是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在 数据库 中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

           对其中所引用的基础表来说,视图的作用似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

    一、视图的作用

           * 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

           * 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

           使用权限可被限制在基表的行的子集上。
           使用权限可被限制在基表的列的子集上。
           使用权限可被限制在基表的行和列的子集上。
           使用权限可被限制在多个基表的连接所限定的行上。
           使用权限可被限制在基表中的数据的统计汇总上。
           使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

           * 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。

    二、视图的优点

           (1)视图能简化用户的操作
           (2)视图机制可以使用户以不同的方式查询同一数据
           (3)视图对数据库重构提供了一定程度的逻辑独立性
           (4)视图可以对机密的数据提供安全保护

    三、视图的安全性

           视图的安全性可以防止未授权用户查看特定的行或列,是用户只能看到表中特定行的方法如下:

           1 在表中增加一个标志用户名的列;

           2 建立视图,是用户只能看到标有自己用户名的行;

           3 把视图授权给其他用户。

    四、逻辑数据独立性

           视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

           1 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

           2 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

           3 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

           4 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

    五、视图的书写格式

    CREATE VIEW <视图名>[(列名组)]
    AS <子查询>

    DROP VIEW <索引名>

    注意:视图可以和基本表一样被查询,但是利用视图进行数据增,删,改操作,会受到一定的限制。

    (1)由两个以上的基本表导出的视图
    (2)视图的字段来自字段表达式函数
    (3)视图定义中有嵌套查询
    (4)在一个不允许更新的视图上定义的视

    展开全文
  • 数据库视图、索引

    千次阅读 2016-10-10 09:03:01
    数据库视图以及索引的概念和作用介绍


    一、数据库视图

     

           视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
           视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。


    1、视图的作用

    * 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

    * 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

    使用权限可被限制在基表的行的子集上。

    使用权限可被限制在基表的列的子集上。

    使用权限可被限制在基表的行和列的子集上。

    使用权限可被限制在多个基表的连接所限定的行上。

    使用权限可被限制在基表中的数据的统计汇总上。

    使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

    * 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。



    2、视图的优点

    (1)视图能简化用户的操作

    (2)视图机制可以使用户以不同的方式查询同一数据

    (3)视图对数据库重构提供了一定程度的逻辑独立性

    (4)视图可以对机密的数据提供安全保护



    3、视图的安全性

    视图的安全性可以防止未授权用户查看特定的行或列,使用户只能看到表中特定行的方法如下:

    (1)在表中增加一个标志用户名的列;

    (2)建立视图,使用户只能看到标有自己用户名的行;

    (3)把视图授权给其他用户。



    4、逻辑数据独立性

           视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

    (1)如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

    (2) 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

    (3)如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

    (4)如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。



    5、创建视图的语法:


    CREATE VIEW <视图名>[(列名组)]

    AS <子查询>


    eg. order为订单表,product为产品表,他们之间是一种一对多的关系,现在可以创建一个视图,代码如下:


    create   view   order_product (orderName, productId, productName )           ---创建一个视图,有三个字段

    as  select   o.orderName, p.productId, p.productName  from order o, product p        ---获取order和product表的字段值

    where  o.orderId=p.orderId                                                               ----建立order表和product表的联系


    6、删除视图的语法:

    DROP VIEW <索引名>


    适当的利用视图可以更清晰地表达查询

    eg. 需要执行这样的查询“对每个学生找出他获得最高成绩的课程号”。可以先定义一个视图,求出每个同学获得的最高成绩:

    CREATE VIEW VMGRADE
    AS
    SELECT Sno,MAX(Grade) Mgrade
    FROM SC
    GROUP BY Sno;

    然后用如下的查询语句完成查询:

    SELECT SC.Sno,Cno FROM SC,VMGRADE WHERE SC.Sno = VMGRADE.Sno AND SC.Grade = VMGRADE.Mgrade;



    二、数据库索引(Index)

     

          索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。


    1、索引的技术原理:

           索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
    例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

     

     

    2、索引的主要种类


          根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。

    唯一索引

            唯一索引是不允许其中任何两行具有相同索引值的索引。
    当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。


    主键索引
            数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。
    在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

    聚集索引
            在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
    如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。


           聚集索引和非聚集索引的区别,如字典默认按字母顺序排序,读者如知道某个字的读音可根据字母顺序快速定位。因此聚集索引和表的内容是在一起的。如读者需查询某个生僻字,则需按字典前面的索引,举例按偏旁进行定位,找到该字对应的页数,再打开对应页数找到该字。这种通过两个地方而查询到某个字的方式就如非聚集索引。


    3、基本特点


            建立索引的目的是加快对表中记录的查找或排序

     

    为表设置索引要付出代价的:(缺点)

    一是增加了数据库的存储空间,

    二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

     

    数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录 。


    创建索引可以大大提高系统的性能:(优点)

     

    第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

    第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

    第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

    第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

    第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

     

    4、什么时候需要创建索引?在哪个列上创建索引号?

     

    一般来说,应该在这些列上创建索引:


    (1)在经常需要搜索的列上,可以加快搜索的速度;


    (2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;


    (3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为

    索引已经排序,其指定的范围是连续的;


    (4)在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;


    (5)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度

     

     

     

    5、哪些列不适合创建索引?

     

           第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。


           第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。


           第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少,不利于使用索引。


            第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。

     

    6、索引案例展示:

    创建一个表,

    CREATE TABLE mytable(
    idserial int primary key,
    category_id int not null default 0,
    user_id int not null default 0,
    adddate int not null default 0
    );

    最普通的情况,是为出现在where子句的字段建一个索引。

     

    如果在查询时常用类似以下的语句:
    SELECT * FROM mytable WHERE category_id=1;


    最直接的应对之道,是为category_id建立一个简单的索引:
    CREATE INDEX mytable_categoryid ON mytable (category_id);


    如果有不止一个选择条件呢?例如:
    SELECT * FROM mytable WHERE category_id=1 AND user_id=2;


    第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。可以建立多重的索引
    CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

     

    索引总结:

           建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。


    以上资料整理于网络。





    展开全文
  • 数据库 视图基础概念

    万次阅读 2019-01-19 11:06:12
    视图是从一表或是多表导出的表,视图与表不同,视图是一虚表,即视图所对应的数据不进行实际存储,数据库中指存储视图的定义,视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。...

    数据库中视图的概念:

    视图是从一个表或是多个表导出的表,视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中指存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

    视图是虚表,是从一个或是几个基本表导出的表。可以将视图看做是移动的窗口,通过它可以看到自己感兴趣的数据,视图是从一个或是多个表中获得的,这些表的数据存放在数据库中,那些用户产生视图的表叫做视图的基表,当然也可以从另一个视图中产生视图。

    视图看上非常像是数据库的物理表,对它的操作同任何其他的表一样。当通过视图修改数据时候,实际上是改变基表中的数据,相反的,基表数据的改变也会自动反应在由基表产生的视图中。

    视图中的数据会随着原表的变化自动更新,因为视图归根结底就是SELECT语句,每次查看视图其实就是执行SELECT语句,因此可以保证数据的最新状态。

    举例理解视图:

    数据库虽然可以存储海量数据,但是在数据表设计上却不可能每种关系创建数据表,例如,对于学生表,存储了学生信息,学生的属性包括学号、姓名、年龄、家庭地址等信息;而学生成绩表只存储了学生学号、科目、成绩等信息。现获得学生姓名和成绩信息,那么就需要创建一个关系,该关系需要包含学生的姓名、科目、成绩。但是为了该关系创建一个新的数据表,并利用实际信息进行填充,以备查询使用,是不合适的,这样会造成了数据库中数据的大量冗余。

    视图就是解决这个问题的最佳策略,因此视图可以存储查询定义,一旦使用视图存储了查询定义,就如同存储了一个新的关系,用户就可以直接对视图中所存储的关系进行各种操作,就如同面对的是真实的数据表。

    使用视图的好处:

    好处1:减少数据的冗余,方便对数据操作(如上面的例子)

    好处2:数据的安全和保密(如下面的例子)

    一个数据表可能包含很多列,但是这些列的信息,对于不同的角色来说,肯定不是全部公开的,对于员工表来说吧,一个普通的员工只能看见这个员工表中的姓名和年龄这些信息,但是对于高层来说,他们要看见员工表中更多信息,不仅仅是上面的两列还有其他的信息,包括员工的住址和员工的薪资待遇,这个时候都是同一张表,怎么办?视图可以解决呀,首先建立一个视图只有员工的姓名和年龄,再建一个视图包含地址和薪资待遇的信息。这样就可以根据不同的角色分配两个视图的查询权限,与实际表隔离开来。这样就可以提高数据访问的安全性了。

    下面就是创建视图的sql的语句:

    create view 视图的名字
    as
    select * from 表名;      --写需要用到的SQL查询语句

    子查询:

    相当于一次性视图,在SELECT语句执行完后就会消失。

    -- 在FROM子句中直接书写定义视图的SELECT语句:

    如上所示,我们把用来定义视图的SELECT语句直接用于FROM子句当中。上图中的SELECT 语句事实上包含了嵌套的结构,首先执行FROM中的SELECT语句,然后才执行外层的SELECT语句。

    虽然子查询支持多层嵌套,但是可读性不好,应该避免使用多层嵌套的子查询。

    另外注意子查询名称不能省略。
    参考:https://blog.csdn.net/daguairen/article/details/52986051

    展开全文
  • MySQL数据库视图

    千次阅读 2012-08-19 09:23:45
    1. 修改、查询、删除记录时都会提示多少条记录被影响,但建表不会提示。...可以根据他们的不同需求,物理的数据库上定义他们对数据库所要求的数据结构,这种根据用户观点所定义的数据结构就是视图
  • Java 数据库视图

    千次阅读 2012-06-04 16:03:39
    数据库视图 视图概念 前面已经提到过视图(View),这一节专门讨论视图的概念、定义和操作。...即使是同样的数据,也可能不同的操作要求,于是就可以根据他们的不同需求,物理的数据库上定义他们对数据库...
  • 数据库视图view的理解

    万次阅读 2015-11-02 11:01:42
    首先解释什么是视图: 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,...由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中
  • (1)物化视图  sqlserver中并没有物化视图这一概念,而是用索引视图来替代(具体参考:...https://msdn.microsoft.com/zh-cn/library/aa290257%28VS.71%29.aspx),这里的物化视图主要指oracle数据库中的
  • 数据库数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)实验1 SQL Server的安装安装过程展示实验2 设计数据库、创建数据库和数据表实验5 视图实验6 完整性约束实验7 权限管理...
  • 背景:数据库表TEST,有两个字段NAME和PRICE 需求:创建视图,包含4列,按NAME字段分组,合计PRICE字段,计数PRICE字段,用组的合计数除以组的数量 做出来的样子如下: 名称 合计价格 数量 单价(合计/...
  • sqlite数据库中表、视图和触发器的基本信息存储一张叫做...sqlite数据库都有一张叫做sqlite_master的表,它定义数据库的模式。sqlite_master的表结构如下: CREATE TABLE sqlite_master ( type TEXT, name TEX
  • 数据库视图的作用

    万次阅读 多人点赞 2018-07-30 14:36:12
    数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这意义上讲,视图就像一窗口,透过它可以看到数据库中...
  • 数据库 物化视图详解

    千次阅读 2015-06-07 17:07:26
    物化视图物化视图是包括一查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。物化视图可以基于表查询,视图和其它的物化视图...
  • 数据库视图view的解析

    千次阅读 2018-05-19 18:36:51
    很多人都有不同的理解,简单点讲,视图是一sql查询语句,是关联应用程序和数据库的桥梁,避免了应用程序对数据库的直接操作。既保护了数据库,又实现了应用程序数据查询功能。视图的优点:1、视图可以简化查询的...
  • java 访问数据库视图

    万次阅读 2012-11-29 16:19:42
    工作多年调用视图到多次,自己写代码使用视图还是头一回,也觉得新鲜,那就开始呗, 数据库系统是Oracle   1 我用的数据库连接客户端是Navicat ,首先创建视图,其实视图就是调用表的操作,提取自己需要的数据放到视图...
  • 数据库视图(oracle)

    千次阅读 2009-09-01 16:37:00
    使用数据库视图通常出于以下两个目的:1。降低操作复杂度;视图是预编译的查询操作,一次定义,之后可快速调用;2。提高系统安全。视图作为数据库对象,可以将其权限独立出来赋给用户,可避免用户对基表的盲目危险...
  • 数据库的查询与视图

    万次阅读 2012-05-28 20:13:03
    第4章 数据库的查询和视图 4.1.1 选择列 通过SELECT语句的项组成结果表的列。 ::= SELECT [ ALL |DISTINCT ] [ TOP n [ PERCENT ] [ WITH TIES ] ] { * /*选择当前表或视图的所有列*/ | { table_name |view_...
  • sqlite数据库中表、视图和触发器的基本信息存储一张叫做...sqlite数据库都有一张叫做sqlite_master的表,它定义数据库的模式。sqlite_master的表结构如下: CREATE TABLE sqlite_master ( type TEXT, name
  • 视图可串行化; 视图等价; 视图可串行化; 视图可串行化判定; 带标记的优先图的构造;
  • 第七章 数据库数据库对象

    万次阅读 热门讨论 2019-03-29 20:04:21
    第七章 数据库数据库对象 SQL Server数据库分类 用户数据库 系统数据库,保存维护系统正常运行的信息 SQL Server系统数据库 master :记录实例的所有系统级信息(元数据,端点,连接服务器和系统配置),记录...
  • 需求:把几个视图,按照某种条件导出数据,导入到Oracle数据库。 一、通过exp和imp命令来处理 需要具备exp和imp命令的权限,视图用户一般不具备这样的权限。 二、PLSQL中,用文本导入工具——推荐 ...
  • 数据库】oracle数据库----内嵌视图

    千次阅读 2016-04-15 22:04:56
    关系视图数据库对象,创建关系视图实际是对查询定义可重用的需求。但有时,查询定义并不会被重用。此时,创建关系视图便不再适宜------过多的关系视图势必增加数据库的维护成本。oracle提供了内嵌视图来解决这一...
  • 视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是使用视图时动态生成的。 定义视图 视图的目的:方便查询操作,减少复杂的SQL语句,增强可读性。 -- 创建视图 -- 视图名字一般以v...
  • 视图(View)作为一种数据库对象,为用户提供了一可以检索数据表中的数据方式。用户通过视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存储位置仍然表中。 视图是一虚拟表,并不代表任何物理数据,...
  • 数据库中的视图理解和优点介绍

    万次阅读 2016-10-31 20:21:03
    数据库视图的概念:视图是从一表或是多表导出的表,视图与表不同,视图是一虚表,即视图所对应的数据不进行实际存储,数据库中指存储视图的定义,视图的数据进行操作时,系统根据视图的定义去操作与视图...
  • 1.visio中新建数据库模型图  打开visio 2010,文件—&gt;新建—&gt;数据库—&gt;数据库模型图。建立数据库模型图之后,菜单栏多出一菜单项"数据库"。 看下图菜单栏多出了一个数据库...
  • oracle数据库----关系视图

    千次阅读 2017-09-06 18:46:15
    数据库的真实数据是存在于...视图介绍、关系视图的创建和使用、内嵌式图的使用、对象视图的使用、物化视图的使用等几方面, 来学习视图的知识,并掌握如何创建和使用各种视图,同时对各种视图之间的区别清晰的
  • oracle数据库----内嵌视图

    千次阅读 2017-09-06 18:40:54
    关系视图数据库对象,创建关系视图实际是对查询定义可重用的需求。但有时,查询定义并不会被重用。此时,创建关系视图便不再适宜------过多的关系视图势必增加数据库的维护成本。oracle提供了内嵌视图来解决这一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 226,005
精华内容 90,402
关键字:

在数据库的每个对象都有两个视图