精华内容
下载资源
问答
  • 下列可以查看视图的创建语句
    千次阅读
    2021-02-11 21:57:14

    一、什么是视图

    视图是基于SELECT 语句的结果集的可视化的表。

    在 SQL 中,一个视图是基于某个 SELECT 语句的结果集的可视化的表。

    视图包含行和列,就像一个真实的表。视图中的域就是来自一个或多个数据库中的真实的表中的域。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

    注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

    二、创建视图的语法

    CREATE VIEW 视图名称 AS SELECT 列名称 FROM 表名称 WHERE 条件

    注释:数据库不会存储视图数据!每当用户查询某个视图时,数据库引擎会使用视图的SELECT语句来重建数据。

    三、如何使用视图

    可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。

    样本数据库 Northwind 拥有一些被默认安装的视图。视图 "Current Product List" 会从 Products 表列出所有正在使用的产品。这个视图使用下列 SQL 创建:

    CREATE VIEW [Current Product List] ASSELECT ProductID,ProductNameFROM ProductsWHERE Discontinued=No我们可以查询上面这个视图:

    SELECT * FROM [Current Product List]Northwind 样本数据库的另一个视图会选取 Products 表中所有单位价格高于平均单位价格的产品:

    CREATE VIEW [Products Above Average Price] ASSELECT ProductName,UnitPriceFROM ProductsWHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) 我们可以像这样查询上面这个视图:

    SELECT * FROM [Products Above Average Price]另一个来自 Northwind 数据库的视图实例会计算在 1997 年每个种类的销售总数。请注意,这个视图会从另一个名为 "Product Sales for 1997" 的视图那里选取数据:

    CREATE VIEW [Category Sales For 1997] ASSELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySalesFROM [Product Sales for 1997]GROUP BY CategoryName 我们可以像这样查询上面这个视图:

    SELECT * FROM [Category Sales For 1997]我们也可以向查询添加条件。现在,我们仅仅需要查看 "Beverages" 类的全部销量:

    SELECT * FROM [Category Sales For 1997]WHERE CategoryName='Beverages'

    更多相关内容
  • Mysql之视图创建、修改、查看、删除

    视图

    一、视图的定义

    MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。

    数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。

    视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证了系统的安全。

    视图并不同于数据表,它们的区别在于以下几点:

    • 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
    • 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
    • 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
    • 视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
    • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
    • 视图的建立和删除只影响视图本身,不影响对应的基本表。

    二、视图的优点

    视图与表在本质上虽然不相同,但视图经过定义以后,结构形式和表一样,可以进行查询、修改、更新和删除等操作。同时,视图具有如下优点:

    1) 定制用户数据,聚焦特定的数据

    在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。

    例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。

    2) 简化数据操作

    在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。

    3) 提高数据的安全性

    视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。

    4) 共享所需数据

    通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。

    5) 更改数据格式

    通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。

    6) 重用 SQL 语句

    视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。

    要注意区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。

    使用视图的时候,还应该注意以下几点:

    • 创建视图需要足够的访问权限。
    • 创建视图的数目没有限制。
    • 视图可以嵌套,即从其他视图中检索数据的查询来创建视图。
    • 视图不能索引,也不能有关联的触发器、默认值或规则。
    • 视图可以和表一起使用。
    • 视图不包含数据,所以每次使用视图时,都必须执行查询中所需的任何一个检索操作。如果用多个连接和过滤条件创建了复杂的视图或嵌套了视图,可能会发现系统运行性能下降得十分严重。因此,在部署大量视图应用时,应该进行系统测试。

    提示:ORDER BY 子句可以用在视图中,但若该视图检索数据的 SELECT 语句中也含有 ORDER BY 子句,则该视图中的 ORDER BY 子句将被覆盖。

    三、创建视图

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]  
      [SQL SECURITY { DEFINER | INVOKER }]
        VIEW view_name [(column_list)]
        AS select_statement
       [WITH [CASCADED | LOCAL] CHECK OPTION]
    1)OR REPLACE:表示替换已有视图
    
    2)ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表
        
        ①UNDEFINED:MySQL将自动选择所要使用的算法
     
      ②MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
     
      ③TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句
     
    缺省ALGORITHM选项等同于ALGORITHM = UNDEFINED
    
    3)DEFINER选项:指出谁是视图的创建者或定义者
     
      ①definer= '用户名'@'登录主机'
     
      ②如果不指定该选项,则创建视图的用户就是定义者,指定关键字CURRENT_USER(当前用户)和不指定该选项效果相同
    
    4)SQL SECURITY选项:要查询一个视图,首先必须要具有对视图的select权限。
     
      但是,如果同一个用户对于视图所访问的表没有select权限,那会怎么样?
     
    SQL SECURITY选项决定执行的结果:
     
      ①SQL SECURITY DEFINER:定义(创建)视图的用户必须对视图所访问的表具有select权限,也就是说将来其他用户访问表的时候以定义者的身份,此时其他用户并没有访问权限。
     
      ②SQL SECURITY INVOKER:访问视图的用户必须对视图所访问的表具有select权限。
     
    缺省SQL SECURITY选项等同于SQL SECURITY DEFINER
    5)select_statement:表示select语句
    
    6)[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内
    
      cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件
    
      local表示更新视图的时候,要满足该视图定义的一个条件即可
    
    TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性 
    

    四、查看视图

    1.使用show create view语句查看视图信息

    show create view 视图名称
    

    2.视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询

    mysql> select * from view_name;
    

    3.有关视图的信息记录在information_schema数据库中的views表中

     select * from information_schema.views  where TABLE_NAME='v_F_players'\G;
    

    五、修改视图

    1、CREATE OR REPLACE VIEW语句修改视图

    基本格式:

    create or replace view view_name as select语句;
    

    在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图

    2、ALTER语句修改视图

    ALTER
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]
        [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]
    

    注意:修改视图是指修改数据库中已存在的表的定义,当基表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致

    3、DML操作(insert、update、delete)更新视图

    因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中

    ​ 不是所有的视图都可以做DML操作。有下列内容之一,视图不能做DML操作:

    ①select子句中包含distinct

    ②select子句中包含组函数

    ③select语句中包含group by子句

    ④select语句中包含order by子句

    ⑤select语句中包含union 、union all等集合运算符

    ⑥where子句中包含相关子查询

    ⑦from子句中包含多个表

    ⑧如果视图中有计算列,则不能更新

    ⑨如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作

    六、删除视图

    删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:

    DROP VIEW [IF EXISTS]   view_name ,[view_name] ;
    

    如果视图不存在,则抛出异常;使用IF EXISTS选项使得删除不存在的视图时不抛出异常。

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

    2018-12-06 14:14:23
    视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。 还可以查询视图的全部信息和指定的数据行和列。 如:检索数据: SQL>SELECT * FROM dept_sum_vw; 查询视图定义: SELECT view_name,text ...
  • 只要满足下列条件,即可通过视图修改基础基表的数据:  1、任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。  2、视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式...
  • 1.创建下列视图 1.1视图view_male,包含学生信息表中所有男生信息; 1.2视图view_male,包含学生信息表中所有男生信息; 1.3视图view_stu_grade,包含每个同学的学号、姓名、课程名和成绩信息; 1.4视图view_avg,...

    数据库原理与应用

    实验六:视图 sql语句

    实验内容:视图的创建、删除和查询

    1.创建下列视图

    1.1视图view_male,包含学生信息表中所有男生信息

    1.1.1创建 视图view_male

    create view view_male
    as
    select *
    from stu_info
    where sex = '男';
    go
    

    运行结果:
    在这里插入图片描述

    1.1.2查看 view_male 视图

    select * from view_male;
    go
    

    运行结果:
    在这里插入图片描述

    1.1.3删除 view_male 视图

    drop view view_male;
    go
    

    运行结果
    在这里插入图片描述

    视图view_stu_grade,包含每个同学的学号、姓名、课程名和成绩信息;

    1.2.1创建 视图view_stu_grade

    create view view_stu_grade
    as
    select
    		s.stu_id 学号,
    		name 姓名,
    		course_name 课程名,
    		grade 成绩
    from
    		stu_info s,
    		course_info c,
    		stu_grade g
    where
    		s.stu_id = g.stu_id
    and
    		g.course_id = c.course_id;
    go
    

    运行结果:
    在这里插入图片描述

    1.2.2查看 view_stu_grade 视图

    select * from view_stu_grade;
    go
    

    运行结果:
    在这里插入图片描述

    1.2.3删除 view_stu_grade 视图

    drop view view_stu_grade;
    go
    

    运行结果:
    在这里插入图片描述

    1.2视图view_avg,包含每个同学的学号、姓名、平均成绩信息

    1.2.1创建 视图view_avg

    create view view_avg
    as
    select
    		s.stu_id 学号,
    		name 姓名,
    		AVG(grade) 平均成绩
    from
    		stu_info s,
    		stu_grade g
    where
    		s.stu_id = g.stu_id
    group by
    		s.stu_id,name;
    go
    

    运行结果:
    在这里插入图片描述

    1.2.2查看 view_avg 视图

    select * from view_avg;
    go
    

    运行结果:
    在这里插入图片描述

    1.2.3删除 view_avg 视图

    drop view view_avg;
    go
    
    

    运行结果:
    在这里插入图片描述

    2.利用CREATE VIEW命令创建下列视图

    	视图view_female,包含学生信息表中所有女生信息;
    	视图view_count,包含每个院系的名称和学生人数信息;
    	视图view_sum,包含每个同学的学号、姓名、课程总成绩信息;
    

    2.1视图view_female,包含学生信息表中所有女生信息

    2.1.1创建 视图view_female

    create view view_female as 
    select * 
    from stu_info
    where sex = '女';
    go
    

    运行结果:
    在这里插入图片描述

    2.1.2查看 view_female 视图

    select * from view_female;
    go
    

    运行结果:
    在这里插入图片描述

    2.1.3删除 view_female 视图

    drop view view_female;
    go
    

    运行结果:
    在这里插入图片描述

    2.2视图view_count,包含每个院系的名称和学生人数信息

    2.2.1创建 视图view_count

    create view view_count 
    as 
    	select	
    		sdept 院系,count(*) 学生人数
    	from 
    		stu_info
    group by 
    	sdept;
    go
    

    运行结果:
    在这里插入图片描述

    2.2.2查看 view_count 视图

    select * from view_count;
    go 
    

    运行结果:
    在这里插入图片描述

    2.2.3删除 view_count 视图

    drop view view_count;
    go
    

    运行结果:
    在这里插入图片描述

    2.3视图view_sum,包含每个同学的学号、姓名、课程总成绩信息

    2.3.1创建 视图view_sum

    create view view_sum 
    as
    	select 
    		stu_info.stu_id 学号,name 姓名,sum(grade) 课程总成绩
    	from 
    		stu_info,stu_grade
    where 
    		stu_info.stu_id = stu_grade.stu_id
    group by
    		stu_info.stu_id,name;
    go
    

    运行结果:
    在这里插入图片描述

    2.3.2查看 view_sum 视图

    select * from view_sum;
    go
    

    运行结果:

    select * from view_sum;go

    2.3.3删除 view_sum 视图

    drop view view_sum;
    go
    

    运行结果:
    在这里插入图片描述

    3.通过视图,查询下列信息

    	查询“信息学院”的学生人数;
    	查询“张元”同学的课程总成绩。
    

    3.1查询“信息学院”的学生人数

    3.1.1创建信息学院学生视图

    create view view_xinxi 
    as
    	select 
    		sdept 信息学院,count(*) 学生人数
    	from 
    		stu_info
    group by sdept
    having sdept = '信息学院';
    go
    

    运行结果:
    在这里插入图片描述

    3.1.2查询视图

    select * from view_xinxi;
    go
    

    运行结果:在这里插入图片描述

    3.1.3删除 view_xinxi 视图

    drop view view_xinxi;
    go
    

    运行结果:
    在这里插入图片描述

    3.2查询“张元”同学的课程总成绩

    3.2.1创建“张元同学”课程总成绩视图

    create view view_zhangyuan
    as
    	select 
    		s.stu_id 学号,name 姓名,sum(grade) 课程总成绩
    	from 
    		stu_info s,
    		stu_grade g
    where s.stu_id = g.stu_id
    group by s.stu_id,name
    having s.name= '张元';
    go
    

    运行结果:
    在这里插入图片描述

    3.2.2查询视图

    select * from view_zhangyuan;
    go
    

    运行结果:
    在这里插入图片描述

    3.2.3删除视图

    drop view view_zhangyuan;
    go
    

    运行结果:
    在这里插入图片描述

    7.实验六:视图 sql文件和实验报告word

    转载请标明出处

    展开全文
  • SQL语句-创建索引

    2021-02-04 21:02:16
    可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。 语法 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) [ WITH ...

    语法:

    CREATE [索引类型] INDEX 索引名称

    ON 表名(列名)

    WITH FILLFACTOR = 填充因子值0~100

    GO

    USE 库名

    GO

    IF EXISTS (SELECT * FROM SYSINDEXES WHERE NAME='IX_TEST_TNAME')--检测是否已经存在IX_TEST_TNAME索引

    DROP INDEX TEST.IX_TEST_TNAME--如果存在则删除

    --创建索引

    CREATE NONCLUSTERED INDEX IX_TEST_TNAME --创建一个非聚集索引

    ON TEST(TNAME) --为TEST表的TNAME字段创建索引

    WITH FILLFACTOR = 30 --填充因子为30%

    GO

    SELECT * FROM TEST(INDEX = IX_TEST_TNAME) WHERE TNAME = 'A' --指定按‘IX_TEST_TNAME’索引查询

    总结:1.什么是索引:数据库中的索引是某个表中一列或多列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

    2.分类:

    唯一索引(UNIQUE):不允许两行具有相同的索引值(创建了唯一约束,系统将自动创建唯一索引)

    主键索引:主键索引要求主键中的每个值是唯一的,(创建主键自动创建主键索引)

    聚集索引(CLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序相同,表中只能包含一个聚集索引,主键列默认为聚集索引

    非聚集索引(NONCLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序不匹配,表中可以有249个非聚集索引

    3.创建索引的标准:用于频繁搜索的列;用于对数据进行排序的列

    注意:如果表中仅有几行,或列中只包含几个不同的值,不推荐创建索引,因为SQL Server 在小型表中用索引搜索数据所花的时间比逐行搜索更长。

    实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:

    其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。

    我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

    如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。

    我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

    通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。

    为给定表或视图创建索引。 只有表或视图的所有者才能为表创建索引。表或视图的所有者可以随时创建索引,无论表中是否有数据。可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。

    语法 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) [ WITH < index_option > [ ,...n] ] [ ON filegroup ]

    < index_option > ::= { PAD_INDEX | FILLFACTOR = fillfactor | IGNORE_DUP_KEY | DROP_EXISTING | STATISTICS_NORECOMPUTE | SORT_IN_TEMPDB }

    参数 UNIQUE

    为表或视图创建唯一索引(不允许存在索引值相同的两行)。视图上的聚集索引必须是 UNIQUE 索引。

    在创建索引时,如果数据已存在,Microsoft? SQL Server? 会检查是否有重复值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行这种检查。如果存在重复的键值,将取消 CREATE INDEX 语句,并返回错误信息,给出第一个重复值。当创建 UNIQUE 索引时,有多个 NULL 值被看作副本。

    如果存在唯一索引,那么会产生重复键值的 UPDATE 或 INSERT 语句将回滚,SQL Server 将显示错误信息。即使 UPDATE 或 INSERT 语句更改了许多行但只产生了一个重复值,也会出现这种情况。如果在有唯一索引并且指定了 IGNORE_DUP_KEY 子句情况下输入数据,则只有违反 UNIQUE 索引的行才会失败。在处理 UPDATE 语句时,IGNORE_DUP_KEY 不起作用。

    SQL Server 不允许为已经包含重复值的列创建唯一索引,无论是否设置了 IGNORE_DUP_KEY。如果尝试这样做,SQL Server 会显示错误信息;重复值必须先删除,才能为这些列创建唯一索引。

    CLUSTERED

    创建一个对象,其中行的物理排序与索引排序相同,并且聚集索引的最低一级(叶级)包含实际的数据行。一个表或视图只允许同时有一个聚集索引。

    具有聚集索引的视图称为索引视图。必须先为视图创建唯一聚集索引,然后才能为该视图定义其它索引。

    在创建任何非聚集索引之前创建聚集索引。创建聚集索引时重建表上现有的非聚集索引。

    如果没有指定 CLUSTERED,则创建非聚集索引。

    说明 因为按照定义,聚集索引的叶级与其数据页相同,所以创建聚集索引时使用 ON filegroup 子句实际上会将表从创建该表时所用的文件移到新的文件组中。在特定的文件组上创建表或索引之前,应确认哪些文件组可用并且有足够的空间供索引使用。文件组的大小必须至少是整个表所需空间的 1.2 倍,这一点很重要。

    NONCLUSTERED

    创建一个指定表的逻辑排序的对象。对于非聚集索引,行的物理排序独立于索引排序。非聚集索引的叶级包含索引行。每个索引行均包含非聚集键值和一个或多个行定位器(指向包含该值的行)。如果表没有聚集索引,行定位器就是行的磁盘地址。如果表有聚集索引,行定位器就是该行的聚集索引键。

    每个表最多可以有 249 个非聚集索引(无论这些非聚集索引的创建方式如何:是使用 PRIMARY KEY 和 UNIQUE 约束隐式创建,还是使用 CREATE INDEX 显式创建)。每个索引均可以提供对数据的不同排序次序的访问。

    对于索引视图,只能为已经定义了聚集索引的视图创建非聚集索引。因此,索引视图中非聚集索引的行定位器一定是行的聚集键。

    index_name

    是索引名。索引名在表或视图中必须唯一,但在数据库中不必唯一。索引名必须遵循标识符规则。

    table

    包含要创建索引的列的表。可以选择指定数据库和表所有者。

    view

    要建立索引的视图的名称。必须使用 SCHEMABINDING 定义视图才能在视图上创建索引。视图定义也必须具有确定性。如果选择列表中的所有表达式、WHERE 和 GROUP BY 子句都具有确定性,则视图也具有确定性。而且,所有键列必须是精确的。只有视图的非键列可能包含浮点表达式(使用 float 数据类型的表达式),而且 float 表达式不能在视图定义的其它任何位置使用。

    若要在确定性视图中查找列,请使用 COLUMNPROPERTY 函数(IsDeterministic 属性)。该函数的 IsPrecise 属性可用来确定键列是否精确。

    必须先为视图创建唯一的聚集索引,才能为该视图创建非聚集索引。

    在 SQL Server 企业版或开发版中,查询优化器可使用索引视图加快查询的执行速度。要使优化程序考虑将该视图作为替换,并不需要在查询中引用该视图。

    在创建索引视图或对参与索引视图的表中的行进行操作时,有 7 个 SET 选项必须指派特定的值。SET 选项 ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、 ANSI_PADDING 和 ANSI_WARNING 必须为 ON。SET 选项 NUMERIC_ROUNDABORT 必须为 OFF。

    如果与上述设置有所不同,对索引视图所引用的任何表执行的数据修改语句 (INSERT、UPDATE、DELETE) 都将失败,SQL Server 会显示一条错误信息,列出所有违反设置要求的 SET 选项。此外,对于涉及索引视图的 SELECT 语句,如果任何 SET 选项的值不是所需的值,则 SQL Server 在处理该 SELECT 语句时不考虑索引视图替换。在受上述 SET 选项影响的情况中,这将确保查询结果的正确性。

    如果应用程序使用 DB-Library 连接,则必须为服务器上的所有 7 个 SET 选项指派所需的值。(默认情况下,OLE DB 和 ODBC 连接已经正确设置了除 ARITHABORT 外所有需要的 SET 选项。)

    如果并非所有上述 SET 选项均有所需的值,则某些操作(例如 BCP、复制或分布式查询)可能无法对参与索引视图的表执行更新。在大多数情况下,将 ARITHABORT 设置为 ON(通过服务器配置选项中的 user options)可以避免这一问题。

    强烈建议在服务器的任一数据库中创建计算列上的第一个索引视图或索引后,尽早在服务器范围内将 ARITHABORT 用户选项设置为 ON。

    有关索引视图注意事项和限制的更多信息,请参见注释部分。

    column

    应用索引的列。指定两个或多个列名,可为指定列的组合值创建组合索引。在 table 后的圆括号中列出组合索引中要包括的列(按排序优先级排列)。

    说明 由 ntext、text 或 image 数据类型组成的列不能指定为索引列。另外,视图不能包括任何 text、ntext 或 image 列,即使在 CREATE INDEX 语句中没有引用这些列。

    当两列或多列作为一个单位搜索最好,或者许多查询只引用索引中指定的列时,应使用组合索引。最多可以有 16 个列组合到一个组合索引中。组合索引中的所有列必须在同一个表中。组合索引值允许的最大大小为 900 字节。也就是说,组成组合索引的固定大小列的总长度不得超过 900 字节。有关组合索引中可变类型列的更多信息,请参见注释部分。

    [ASC | DESC]

    确定具体某个索引列的升序或降序排序方向。默认设置为 ASC。

    n

    表示可以为特定索引指定多个 columns 的占位符。

    PAD_INDEX

    指定索引中间级中每个页(节点)上保持开放的空间。PAD_INDEX 选项只有在指定了 FILLFACTOR 时才有用,因为 PAD_INDEX 使用由 FILLFACTOR 所指定的百分比。默认情况下,给定中间级页上的键集,SQL Server 将确保每个索引页上的可用空间至少可以容纳一个索引允许的最大行。如果为 FILLFACTOR 指定的百分比不够大,无法容纳一行,SQL Server 将在内部使用允许的最小值替代该百分比。

    说明 中间级索引页上的行数永远都不会小于两行,无论 FILLFACTOR 的值有多小。

    FILLFACTOR = fillfactor

    指定在 SQL Server 创建索引的过程中,各索引页叶级的填满程度。如果某个索引页填满,SQL Server 就必须花时间拆分该索引页,以便为新行腾出空间,这需要很大的开销。对于更新频繁的表,选择合适的 FILLFACTOR 值将比选择不合适的 FILLFACTOR 值获得更好的更新性能。FILLFACTOR 的原始值将在 sysindexes 中与索引一起存储。

    如果指定了 FILLFACTOR,SQL Server 会向上舍入每页要放置的行数。例如,发出 CREATE CLUSTERED INDEX ...FILLFACTOR = 33 将创建一个 FILLFACTOR 为 33% 的聚集索引。假设 SQL Server 计算出每页空间的 33% 为 5.2 行。SQL Server 将其向上舍入,这样,每页就放置 6 行。

    说明 显式的 FILLFACTOR 设置只是在索引首次创建时应用。SQL Server 并不会动态保持页上可用空间的指定百分比。

    用户指定的 FILLFACTOR 值可以从 1 到 100。如果没有指定值,默认值为 0。如果 FILLFACTOR 设置为 0,则只填满叶级页。可以通过执行 sp_configure 更改默认的 FILLFACTOR 设置。

    只有不会出现 INSERT 或 UPDATE 语句时(例如对只读表),才可以使用 FILLFACTOR 100。如果 FILLFACTOR 为 100,SQL Server 将创建叶级页 100% 填满的索引。如果在创建 FILLFACTOR 为 100% 的索引之后执行 INSERT 或 UPDATE,会对每次 INSERT 操作以及有可能每次 UPDATE 操作进行页拆分。

    如果 FILLFACTOR 值较小(0 除外),就会使 SQL Server 创建叶级页不完全填充的新索引。例如,如果已知某个表包含的数据只是该表最终要包含的数据的一小部分,那么为该表创建索引时,FILLFACTOR 为 10 会是合理的选择。FILLFACTOR 值较小还会使索引占用较多的存储空间。

    下表说明如何在已指定 FILLFACTOR 的情况下填充索引页。

    FILLFACTOR 中间级页叶级页 0 一个可用项 100% 填满 1% -99 一个可用项 <= FILLFACTOR% 填满 100% 一个可用项 100% 填满

    一个可用项是指页上可以容纳另一个索引项的空间。

    重要 用某个 FILLFACTOR 值创建聚集索引会影响数据占用存储空间的数量,因为 SQL Server 在创建聚集索引时会重新分布数据。

    IGNORE_DUP_KEY

    控制当尝试向属于唯一聚集索引的列插入重复的键值时所发生的情况。如果为索引指定了 IGNORE_DUP_KEY,并且执行了创建重复键的 INSERT 语句,SQL Server 将发出警告消息并忽略重复的行。

    如果没有为索引指定 IGNORE_DUP_KEY,SQL Server 会发出一条警告消息,并回滚整个 INSERT 语句。

    下表显示何时可使用 IGNORE_DUP_KEY。

    索引类型 选项 聚集 不允许 唯一聚集 允许使用 IGNORE_DUP_KEY 非聚集 不允许 唯一非聚集 允许使用 IGNORE_DUP_KEY

    DROP_EXISTING

    指定应除去并重建已命名的先前存在的聚集索引或非聚集索引。指定的索引名必须与现有的索引名相同。因为非聚集索引包含聚集键,所以在除去聚集索引时,必须重建非聚集索引。如果重建聚集索引,则必须重建非聚集索引,以便使用新的键集。

    为已经具有非聚集索引的表重建聚集索引时(使用相同或不同的键集), DROP_EXISTING 子句可以提高性能。DROP_EXISTING 子句代替了先对旧的聚集索引执行 DROP INDEX 语句,然后再对新的聚集索引执行 CREATE INDEX 语句的过程。非聚集索引只需重建一次,而且还只是在键不同的情况下才需要。

    如果键没有改变(提供的索引名和列与原索引相同),则 DROP_EXISTING 子句不会重新对数据进行排序。在必须压缩索引时,这样做会很有用。

    无法使用 DROP_EXISTING 子句将聚集索引转换成非聚集索引;不过,可以将唯一聚集索引更改为非唯一索引,反之亦然。

    说明 当执行带 DROP_EXISTING 子句的 CREATE INDEX 语句时,SQL Server 假定索引是一致的(即索引没有损坏)。指定索引中的行应按 CREATE INDEX 语句中引用的指定键排序。

    STATISTICS_NORECOMPUTE

    指定过期的索引统计不会自动重新计算。若要恢复自动更新统计,可执行没有 NORECOMPUTE 子句的 UPDATE STATISTICS。

    重要 如果禁用分布统计的自动重新计算,可能会妨碍 SQL Server 查询优化器为涉及该表的查询选取最佳执行计划。

    SORT_IN_TEMPDB

    指定用于生成索引的中间排序结果将存储在 tempdb 数据库中。如果 tempdb 与用户数据库不在同一磁盘集,则此选项可能减少创建索引所需的时间,但会增加创建索引时使用的磁盘空间。

    有关更多信息,请参见 tempdb 和索引创建。

    ON filegroup

    在给定的 filegroup 上创建指定的索引。该文件组必须已经通过执行 CREATE DATABASE 或 ALTER DATABASE 创建。

    注释 为表或索引分配空间时,每次递增一个扩展盘区(8 个 8 KB 的页)。每填满一个扩展盘区,就会再分配一个。如果表非常小或是空表,其索引将使用单页分配,直到向索引添加了 8 页后,再转而进行扩展盘区分配。若要获得有关索引已分配和占用的空间数量的报表,请使用 sp_spaceused。

    创建聚集索引要求数据库中的可用空间大约为数据大小的 1.2 倍。该空间不包括现有表占用的空间;将对数据进行复制以创建聚集索引,旧的无索引数据将在索引创建完成后删除。使用 DROP_EXISTING 子句时,聚集索引所需的空间数量与现有索引的空间要求相同。所需的额外空间可能还受指定的 FILLFACTOR 的影响。

    在 SQL Server 2000 中创建索引时,可以使用 SORT_IN_TEMPDB 选项指示数据库引擎在 tempdb 中存储中间索引排序结果。如果 tempdb 在不同于用户数据库所在的磁盘集上,则此选项可能减少创建索引所需的时间,但会增加用于创建索引的磁盘空间。除在用户数据库中创建索引所需的空间外, tempdb 还必须有大约相同的额外空间来存储中间排序结果。有关更多信息,请参见 tempdb 和索引创建。

    CREATE INDEX 语句同其它查询一样优化。SQL Server 查询处理器可以选择扫描另一个索引,而不是执行表扫描,以节省 I/O 操作。在某些情况下,可以不必排序。

    在运行 SQL Server 企业管理器和程序员版的多处理器计算机上,CREATE INDEX 自动使用多个处理器执行扫描和排序,与其它查询的操作方式相同。执行一条 CREATE INDEX 语句所使用的处理器数由配置选项 max degree of parallelism 和当前的工作负荷决定。如果 SQL Server 检测到系统正忙,则在开始执行语句之前,CREATE INDEX 操作的并发程度会自动降低。

    自上一次文件组备份以来受 CREATE INDEX 语句影响的全部文件组必须作为一个单位备份。有关文件和文件组备份的更多信息,请参见 BACKUP。

    备份和 CREATE INDEX 操作不相互防碍。如果正在进行备份,则在完整日志记录模式中创建索引,而这可能需要额外的日志空间。

    若要显示有关对象索引的报表,请执行 sp_helpindex。

    可以为临时表创建索引。在除去表或终止会话时,所有索引和触发器都将被除去。

    索引中的可变类型列 索引键允许的最大大小为 900 字节,不过 SQL Server 2000 允许在可能包含大量可变类型列的列上创建索引,而这些列的最大大小超过 900 字节。

    在创建索引时,SQL Server 检查下列条件:

    所有参与索引定义的固定数据列的总长度必须小于或等于 900 字节。当所要创建的索引只由固定数据列构成时,固定数据列的总计大小必须小于或等于 900 字节。否则将不能创建索引,且 SQL Server 将返回错误。

    如果索引定义由固定类型列和可变类型列组成,且固定数据列满足前面的条件(小于或等于 900 字节),则 SQL Server 仍要检查可变类型列的总大小。如果可变类型列的最大大小与固定数据列大小的和大于 900 字节,则 SQL Server 将创建索引,不过将给用户返回警告消息以提醒用户:如果随后在可变类型列上的插入或更新操作导致总大小超过 900 字节,则操作将失败且用户将收到运行时错误。同样,如果索引定义只由可变类型列组成,且这些列的最大总大小大于 900 字节,则 SQL Server 将创建索引,不过将返回警告消息。 有关更多信息,请参见索引键的最大值。

    在计算列和视图上创建索引时的考虑 在 SQL Server 2000 中,还可以在计算列和视图上创建索引。在视图上创建唯一聚集索引可以提高查询性能,因为视图存储在数据库中的方式与具有聚集索引的表的存储方式相同。

    UNIQUE 或 PRIMARY KEY 只要满足所有索引条件,就可以包含计算列。具体说来就是,计算列必须具有确定性、必须精确,且不能包含 text、ntext 或 image 列。有关确定性的更多信息,请参见确定性函数和非确定性函数。

    在计算列或视图上创建索引可能导致前面产生的 INSERT 或 UPDATE 操作失败。当计算列导致算术错误时可能产生这样的失败。例如,虽然下表中的计算列 c 将导致算术错误,但是 INSERT 语句仍有效:

    CREATE TABLE t1 (a int, b int, c AS a/b) GO INSERT INTO t1 VALUES ('1', '0') GO

    相反,如果创建表之后在计算列 c 上创建索引,则上述 INSERT 语句将失败。

    CREATE TABLE t1 (a int, b int, c AS a/b) GO CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1.c GO INSERT INTO t1 VALUES ('1', '0') GO

    在通过数字或 float 表达式定义的视图上使用索引所得到的查询结果,可能不同于不在视图上使用索引的类似查询所得到的结果。这种差异可能是由对基础表进行 INSERT、DELETE 或 UPDATE 操作时的舍入错误引起的。

    若要防止 SQL Server 使用索引视图,请在查询中包含 OPTION (EXPAND VIEWS) 提示。此外,任何所列选项设置不正确均会阻止优化程序使用视图上的索引。有关 OPTION (EXPAND VIEWS) 提示的更多信息,请参见 SELECT。

    对索引视图的限制 定义索引视图的 SELECT 语句不得包含 TOP、DISTINCT、COMPUTE、HAVING 和 UNION 关键字。也不能包含子查询。

    SELECT 列表中不得包含星号 (*)、'table.*' 通配符列表、DISTINCT、COUNT(*)、COUNT()、基表中的计算列和标量聚合。

    非聚合 SELECT 列表中不能包含表达式。聚合 SELECT 列表(包含 GROUP BY 的查询)中可能包含 SUM 和 COUNT_BIG();它一定包含 COUNT_BIG(*)。不允许有其它聚合函数(MIN、MAX、STDEV,...)。

    使用 AVG 的复杂聚合无法参与索引视图的 SELECT 列表。不过,如果查询使用这样的聚合,则优化程序将能使用该索引视图,用 SUM 和 COUNT_BIG 的简单聚合组合代替 AVG。

    若某列是从取值为 float 数据类型或使用 float 表达式进行取值的表达式得到的,则不能作为索引视图或表中计算列的索引键。这样的列被视为是不精确的。使用 COLUMNPROPERTY 函数决定特定计算列或视图中的列是否精确。

    索引视图受限于以下的附加限制:

    索引的创建者必须拥有表。所有表、视图和索引必须在同一数据库中创建。

    定义索引视图的 SELECT 语句不得包含视图、行集函数、行内函数或派生表。同一物理表在该语句中只能出现一次。

    在任何联接表中,均不允许进行 OUTER JOIN 操作。

    搜索条件中不允许使用子查询或者 CONTAINS 或 FREETEXT 谓词。

    如果视图定义包含 GROUP BY 子句,则视图的 SELECT 列表中必须包含所有分组依据列及 COUNT_BIG(*) 表达式。此外,CREATE UNIQUE CLUSTERED INDEX 子句中必须只包含这些列。 可以创建索引的视图的定义主体必须具有确定性且必须精确,这类似于计算列上的索引要求。请参见在计算列上创建索引。

    权限 CREATE INDEX 的权限默认授予 sysadmin 固定服务器角色、db_ddladmin 和 db_owner 固定数据库角色和表所有者且不能转让。

    示例 A. 使用简单索引 下面的示例为 authors 表的 au_id 列创建索引。

    SET NOCOUNT OFF USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'au_id_ind') DROP INDEX authors.au_id_ind GO USE pubs CREATE INDEX au_id_ind ON authors (au_id) GO

    B. 使用唯一聚集索引 下面的示例为 emp_pay 表的 employeeID 列创建索引,并且强制唯一性。因为指定了 CLUSTERED 子句,所以该索引将对磁盘上的数据进行物理排序。

    SET NOCOUNT ON USE pubs IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'emp_pay') DROP TABLE emp_pay GO USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'employeeID_ind') DROP INDEX emp_pay.employeeID_ind GO USE pubs GO CREATE TABLE emp_pay ( employeeID int NOT NULL, base_pay money NOT NULL, commission decimal(2, 2) NOT NULL ) INSERT emp_pay VALUES (1, 500, .10) INSERT emp_pay VALUES (2, 1000, .05) INSERT emp_pay VALUES (3, 800, .07) INSERT emp_pay VALUES (5, 1500, .03) INSERT emp_pay VALUES (9, 750, .06) GO SET NOCOUNT OFF CREATE UNIQUE CLUSTERED INDEX employeeID_ind ON emp_pay (employeeID) GO

    C. 使用简单组合索引 下面的示例为 order_emp 表的 orderID 列和 employeeID 列创建索引。

    SET NOCOUNT ON USE pubs IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'order_emp') DROP TABLE order_emp GO USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'emp_order_ind') DROP INDEX order_emp.emp_order_ind GO USE pubs GO CREATE TABLE order_emp ( orderID int IDENTITY(1000, 1), employeeID int NOT NULL, orderdate datetime NOT NULL DEFAULT GETDATE(), orderamount money NOT NULL )

    INSERT order_emp (employeeID, orderdate, orderamount) VALUES (5, '4/12/98', 315.19) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (5, '5/30/98', 1929.04) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (1, '1/03/98', 2039.82) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (1, '1/22/98', 445.29) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (4, '4/05/98', 689.39) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (7, '3/21/98', 1598.23) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (7, '3/21/98', 445.77) INSERT order_emp (employeeID, orderdate, orderamount) VALUES (7, '3/22/98', 2178.98) GO SET NOCOUNT OFF CREATE INDEX emp_order_ind ON order_emp (orderID, employeeID)

    D. 使用 FILLFACTOR 选项 下面的示例使用 FILLFACTOR 子句,将其设置为 100。FILLFACTOR 为 100 将完全填满每一页,只有确定表中的索引值永远不会更改时,该选项才有用。

    SET NOCOUNT OFF USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'zip_ind') DROP INDEX authors.zip_ind GO USE pubs GO CREATE NONCLUSTERED INDEX zip_ind ON authors (zip) WITH FILLFACTOR = 100

    E. 使用 IGNORE_DUP_KEY 下面的示例为 emp_pay 表创建唯一聚集索引。如果输入了重复的键,将忽略该 INSERT 或 UPDATE 语句。

    SET NOCOUNT ON USE pubs IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'emp_pay') DROP TABLE emp_pay GO USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'employeeID_ind') DROP INDEX emp_pay.employeeID_ind GO USE pubs GO CREATE TABLE emp_pay ( employeeID int NOT NULL, base_pay money NOT NULL, commission decimal(2, 2) NOT NULL ) INSERT emp_pay VALUES (1, 500, .10) INSERT emp_pay VALUES (2, 1000, .05) INSERT emp_pay VALUES (3, 800, .07) INSERT emp_pay VALUES (5, 1500, .03) INSERT emp_pay VALUES (9, 750, .06) GO SET NOCOUNT OFF GO CREATE UNIQUE CLUSTERED INDEX employeeID_ind ON emp_pay(employeeID) WITH IGNORE_DUP_KEY

    F. 使用 PAD_INDEX 创建索引 下面的示例为 authors 表中的作者标识号创建索引。没有 PAD_INDEX 子句,SQL Server 将创建填充 10% 的叶级页,但是叶级之上的页几乎被完全填满。使用 PAD_INDEX 时,中间级页也填满 10%。

    说明 如果没有指定 PAD_INDEX,唯一聚集索引的索引页上至少会出现两项。

    SET NOCOUNT OFF USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'au_id_ind') DROP INDEX authors.au_id_ind GO USE pubs CREATE INDEX au_id_ind ON authors (au_id) WITH PAD_INDEX, FILLFACTOR = 10

    G. 为视图创建索引 下面的示例将创建一个视图,并为该视图创建索引。然后,引入两个使用该索引视图的查询。

    USE Northwind GO

    --Set the options to support indexed views. SET NUMERIC_ROUNDABORT OFF GO SET ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS ON GO

    --Create view. CREATE VIEW V1 WITH SCHEMABINDING AS SELECT SUM(UnitPrice*Quantity*(1.00-Discount)) AS Revenue, OrderDate, ProductID, COUNT_BIG(*) AS COUNT FROM dbo.[Order Details] od, dbo.Orders o WHERE od.OrderID=o.OrderID GROUP BY OrderDate, ProductID GO

    --Create index on the view. CREATE UNIQUE CLUSTERED INDEX IV1 ON V1 (OrderDate, ProductID) GO

    --This query will use the above indexed view. SELECT SUM(UnitPrice*Quantity*(1.00-Discount)) AS Rev, OrderDate, ProductID FROM dbo.[Order Details] od, dbo.Orders o WHERE od.OrderID=o.OrderID AND ProductID in (2, 4, 25, 13, 7, 89, 22, 34) AND OrderDate >= '05/01/1998' GROUP BY OrderDate, ProductID ORDER BY Rev DESC

    --This query will use the above indexed view. SELECT OrderDate, SUM(UnitPrice*Quantity*(1.00-Discount)) AS Rev FROM dbo.[Order Details] od, dbo.Orders o WHERE od.OrderID=o.OrderID AND DATEPART(mm,OrderDate)= 3 AND DATEPART(yy,OrderDate) = 1998 GROUP BY OrderDate ORDER BY OrderDate ASC

    展开全文
  • 图书名称,作者,出版社,出版日期,价格)借阅表(借阅编号,读者编号,图书编号,借阅日期,归还日期)用T-SQL语句实现下列功能:创建视图“2018年出版图书”,查看2018年出版的图书信息,并要...
  • mysql视图创建可更新视图

    千次阅读 2018-07-12 16:13:36
    我们知道,在mysql中,视图不仅是可查询的,而且是可...但是,要创建可更新视图,定义视图的select语句不能包含以下任何元素:聚合函数,如:min,max,sum,avg,count等。DISTINCT子句GROUP BY子句HAVING子句左连...
  • 创建视图使用CREATE VIEW语句,基本语法格式如下: create [or replace] [algorithm={undefined|merge|TEMPTABLE}] VIEW view_name [(column_list)] as select_statement [with[cascaded|local]check option] 其中...
  • 一. 视图 1.1 什么是视图       视图是一种数据库对象,是从一个或者多个数据表或视图中导出...根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合, &n
  • 1.1.1.概述在SQL中,数据定义语言( DDL ) 用来创建和修改数据库Schema,例如表、索引和用户等。其中数据库的Schema描述了用户数据模型、字段和数据类型。DDL 语句类似于用于定义数据结构的计算机编程语言。常见DDL ...
  • SQL 创建、更新和删除视图的方法

    千次阅读 2021-01-27 20:30:03
    视图是可视化的表。本章讲解如何创建、更新和删除视图。SQL CREATE VIEW 语句在...您可以视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。SQL CREATE VIEW 语法CR...
  • 1.创建序列,名称:master_seq, 起始值:1, 增量:1, 无最大值, 缓存10 步骤; 1).PLSQL可视化工具创建 ...2.使用SQL语句创建序列,仍然在SQL Windows 窗口中输入下列创建序列语句,执行. ...
  • mysql如何创建视图

    千次阅读 2021-01-12 11:53:41
    在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。...mysql视图可以使用SQL CREATE VIEW命令创建。 SQL CREATE VIEW 语法: CREATE VIEW view_name AS SELECT column_name(s) FROM table_name
  • 视图-数据库习题

    千次阅读 2021-11-29 22:09:46
    SQL语言中,创建视图的命令是( )。 A. create table B. create view C. create index D. create proc 正确答案: B 数据定义语言需要两个关键字,第一个是动词,第二个是名词,表示对象类型。A选项
  • SQLServer之创建视图

    万次阅读 2018-10-24 11:33:17
    视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。 使用SSMS数据库管理工具创建视图 1、连接数据库,选择数据库,展开数据库-》右键视图-》选择新建视图。 ...
  • 查看表,视图,过程的创建语句

    千次阅读 2009-09-17 17:03:00
    如果要获取表、视图、过程的定义。...当然也不要忘了设置LONG、PAGESIZE和LINESIZE 通过设置long可以查看整条创建sql,如:set long 100000,但是此仅对本次会话有效。 保存此设置,可以在D:/ora
  • 第3章 表和视图创建修改

    千次阅读 2019-07-31 10:54:49
    第3章 表和视图创建修改 数据库实际上是数据表的集合。在关系数据库中,数据库通常包含多个数据表,数据库中的数据信息都是存储在数据表当中的。数据表是对数据进行存储和操作的一种逻辑结构,对于用户而言,一个...
  • MySQL数据库视图

    千次阅读 2021-02-02 14:05:02
    1. 修改、查询、删除记录时...可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种根据用户观点所定义的数据结构就是视图视图与表(有时为与视图区别,也称表为基本表——Base Tabl...
  • 视图是一种虚拟表,来自一个或者多个表的行或者列,视图并不是数据库中存储的数据值,可以简单的理解视图就是封装了一段查询语句,调用该视图就得到查询语句查询出来的临时表. ---------------------------------------...
  • oracle数据库 视图相关的语句

    千次阅读 2017-12-02 23:51:00
    创建视图: create or replace force view view_owners as select * from T_OWNERS删除视图语法: drop view view_owners创建视图 :业主类型为 1 的业主信息 create or replace view view_owners as select * ...
  • oracle视图的几个重要内容

    千次阅读 2021-04-30 10:43:57
    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。...视图的定义:视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。...
  • Mysql视图详解

    2022-02-04 21:39:07
    基表:用来创建视图的表叫做基表 为什么要使用视图? 因为视图的诸多优点,如下 1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。 2)...
  • 新手带你学之SQL 视图(Views)的创建、更新和删除

    千次阅读 多人点赞 2019-07-19 16:03:38
    下面针对SQL视图创建、更新和删除进行简单的介绍,有兴趣的小伙伴请多多交流!!! SQL CREATE VIEW 语句 ...您可以视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表...
  • Oracle视图中建立索引注意事项.doc

    千次阅读 2021-05-01 01:00:01
    Oracle视图中建立索引的注意事项在视图创建索引需要三个条件:一、视图必须绑定到架构。要做到这点,在?CREATE?VIEW?语句中,必须加上?WITH?SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,...
  • MySQL索引、视图创建与管理操作实验

    万次阅读 多人点赞 2019-12-03 23:25:17
    实验4:索引、视图创建与管理操作实验 一、实验目的: 理解索引的概念与类型。 掌握创建、更改、删除索引的方法。 掌握维护索引的方法。 理解视图的概念。 掌握创建、更改、删除视图的方法。 掌握使用视图来访问...
  • 物化视图的刷新

    千次阅读 2022-04-24 09:22:42
    物化视图的刷新方式说明 物化视图可以选择三种不同的刷新方式,根据不同的需求,选择不同的刷新方式。 Complete刷新:会删除表中的所有记录(如果是单表刷新,可能会采用Truncate的方式),然后根据物化视图中查询...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,755
精华内容 14,702
热门标签
关键字:

下列可以查看视图的创建语句