zoukankan      html  css  js  c++  java
  • 视图、索引

        


    一、关于视图

    1、概念:

      视图包含一张或多张表的列所组成的数据集,是一张虚拟表,储存在数据库中的查询的sql语句

    2、使用原因:

      限制用户只能存取表内特定的列
      不用重新建表即可存取需要的数据
      减少复杂性

    3、创建视图时应注意:

      1) 只能在当前数据库中创建,视图中记录的数目限制由其基表中的记录数决定
      2)视图名称遵循标识符规则,对每个用户必须唯一,名称不能与该用户拥有的任何表的名称相同
      3)视图的基表或视图被删除,视图不可再使用,直到创建新的基表或视图
      4)视图中某一列为函数、数学表达式、常量或来自多张表的列名相同,则必须为列定义名称
      5)不能在视图上创建索引,不能在规则、默认、触发器的定义中引用视图
      6)通过视图查询数据时,数据修改语句不能违反数据完整性规则

    4、创建

    create view 视图名 [(列名)]
    as
    begin
      sql语句
    end

    5、优点

      1)视点集中
      2)简化操作
      3)定制数据
      4)合并分割数据
      5)安全性提高


    二、关于索引

    1、概念:

      是单独、物理的数据库结构,是数据库的一张表中所包含的值的列表(相当于目录)

    2、类型:

    聚集索引(列连续数据连续,物理顺序与键值逻辑(索引)顺序相同,每张表只有一个该类索引):主键索引

    非聚集索引(数据不必连续,不必一致,每张表小于249个该类索引):
      1)唯一索引:不允许两行或多行具有相同的索引值
      2)复合索引:两列合在一起变成一个索引
      3)视图索引:在视图上添加索引
      4)全文索引:适用于字符串长的列
      5)XML索引:对二进制进行搜索的索引

    3、创建索引语法

    create [unique][clustered|nonclustered] index 索引名
    on 表名(列名)
    [
      with
       fillfactor=fillfactor
    ]

    unique:指定所创建的索引是否唯一
    clustered:索引的类型(聚集与非聚集)
    fillfactor:索引页的填充率(填充因子)指示该索引填充空间所占用的百分比

    4、索引的操作

      重新生成:alter index 索引名 on 表名 rebuild
      重新组织:alter index 索引名 on 表名 reorganize

    5、索引的优缺点

    优点:提高查询效率
    缺点:需占用物理空间

    三、相关习题

    1、视图

    use master
    if DB_ID('studentDB') is not null
     drop database studentDB
     go
    create database studentDB
    go
    use studentDB
    go


    if OBJECT_ID('classInfo','table') is not null
     drop table classInfo
     go
    create table classInfo
    (
     classId int primary key identity,
     className varchar(30) unique
    )
    --插入测试数据
    insert into classInfo values('高三八班')
    insert into classInfo values('高三二班')
    insert into classInfo values('高三三班')
    insert into classInfo values('高三四班')
    insert into classInfo values('高三五班')
    insert into classInfo values('高三六班')
    insert into classInfo values('高三七班')

    select * from classInfo


    if OBJECT_ID('student','table') is not null
     drop table student
     go
    create table student
    (
     stuId int primary key identity,
     stuName varchar(30),
     stuAge int,
     stuPhone varchar(20) check(stuPhone like  '139%' or stuPhone like '133%'),
     classId int references classInfo(classId),
     stuState int check(stuState=0 or stuState=1 or stuState=2)  --0为在读 1为休学 2为转学
    )
    insert into student values('张三',18,'13997805814',1,0)
    insert into student values('张三',17,'13397805814',1,0)
    insert into student values('张三',19,'13977805814',5,0)
    insert into student values('张死',20,'13987805814',1,0)
    insert into student values('李四',21,'13997805914',2,0)
    insert into student values('王五',28,'13997805234',3,0)
    insert into student values('周六',38,'13997805845',2,0)
    insert into student values('abc',15,'13378923147',1,0)

    select * from student

    go
    --1、创建视图,显示姓名,年龄,电话,班级名,状态
    if OBJECT_ID('view_student_classInfo','view') is not null
     drop view view_student_classInfo
     go
    create view view_student_classInfo
    as
     select  '姓名'=stuName, '年龄'=stuAge,'电话'=stuPhone,'班级名'=className,'状态'=stuState
     from student s join classInfo c on s.classId=c.classId
    go

    --调用
    select * from  view_student_classInfo

    --2、创建视图,显示学号,姓名,年龄,电话
    if OBJECT_ID('view_student','view') is not null
     drop view view_student
     go
    create view view_student
    as
     select  '学号'=stuId,'姓名'=stuName, '年龄'=stuAge,'电话'=stuPhone
     from student
    go

    --调用
    select * from view_student
    --3、创建视图,显示学号,姓名,班级名
    if OBJECT_ID('view_show','view') is not null
     drop view view_show
     go
    create view view_show
    as
     select  '学号'=stuId,'姓名'=stuName,'班级'=className
     from student s join classInfo c on s.classId=c.classId
    go

    --调用
    select * from view_show


    2、索引
    use HR
    go
    select * from dbo.COUNTRIES
    select * from dbo.DEPARTMENTS
    select * from dbo.EMPLOYEES
    select * from dbo.JOB_HISTORY
    select * from dbo.JOBS
    select * from dbo.LOCATIONS
    select * from dbo.REGIONS


    --第一题
    if OBJECT_ID('view_EMPLOYEES','view') is not null
     drop view view_EMPLOYEES
     go
    create view view_EMPLOYEES
    as
     select EMPLOYEE_ID,(FIRST_NAME+LAST_NAME) name,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_TITLE,SALARY,COMMISSION_PCT,MANAGER_NAME=(FIRST_NAME+LAST_NAME) ,DEPARTMENT_NAME
      from dbo.EMPLOYEES e
      join dbo.DEPARTMENTS d on e.MANAGER_ID=d.MANAGER_ID and e.DEPARTMENT_ID=d.DEPARTMENT_ID
      join dbo.JOBS j on e.JOB_ID=j.JOB_ID
    go

    select * from view_EMPLOYEES

    --第二题
    if OBJECT_ID('view_Show','view') is not null
     drop view view_Show
     go
    create view view_Show
    as
     select EMPLOYEE_ID,(FIRST_NAME+LAST_NAME) name,JOB_TITLE,SALARY,DEPARTMENT_NAME
      from dbo.EMPLOYEES e
      join dbo.DEPARTMENTS d on e.MANAGER_ID=d.MANAGER_ID and e.DEPARTMENT_ID=d.DEPARTMENT_ID
      join dbo.JOBS j on e.JOB_ID=j.JOB_ID
    go

    select * from view_Show


    --第三题
    --为表EMPLOYEES 的first_namehe last_name 创建索引
    if OBJECT_ID('index_EMPLOYEES_FL','indexes') is not null
     drop index EMPLOYEES .index_EMPLOYEES
     go
    create nonclustered index index_EMPLOYEES_FL on EMPLOYEES(FIRST_NAME,LAST_NAME)
    go
    select * from EMPLOYEES
    go


     

  • 相关阅读:
    Java SE 第十二,三,四,五六讲 Java基础知识回顾
    Java SE第二十一 抽象类
    Java SE 第二十讲 static与final关键字详解
    使用AspNetPager分页的范例
    AJax错误"WebForm1"没有定义的javascript错误的解决方法
    如何为自定义的控件在工具箱中自定义个性化的图标
    C#面向对象名词比较(转ttyp 的文章)
    vs2003自带的报表使用load("rpt.rpt")方式,显示不出报表工具的图片解决方案
    DropDownlist常见的小错误
    Ajax获取数据库中的字段
  • 原文地址:https://www.cnblogs.com/DBtwoer/p/3055981.html
Copyright © 2011-2022 走看看