精华内容
下载资源
问答
  • 数据库视图

    2019-04-11 11:04:34
    试图是数据库系统中一非常有用的数据库对象。MySQL5.0以后的版本添加了对视图得支持。 1.认识试图 视图是一个虚拟表,其内容由查询定义。同真实表一样,视图...视图不是数据库中真实的表,而是一张虚拟表,其...

    试图是数据库系统中一种非常有用的数据库对象。MySQL5.0以后的版本添加了对视图得支持。

    视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据,但视图并不是数据库真实存储的数据表。
    视图是从一个、多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行。但视图并不同于表,他的区别在于以下几点:

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

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

    • 定义用户数据,聚焦特定的数据。在实际的应用过程中,不同的用户对不同的数据又不同的要求。例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。
    • 简化数据操作。在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其它表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。
    • 提高基表数据的安全性。视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。
    • 共享所需数据。通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,可以共享数据库中的数据,同样的数据只需要存储一次。
    • 更改数据格式。通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。
    • 重用SQL语句。视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义的从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
    • 注意:要区别视图和表的本质,即试图是基于真实表的一张虚拟的表,其数据的来源均建立在真实表的基础上。

    使用视图时,还应该注意一下几点:

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

    2012-11-03 22:29:54
    索引其实关键目的是为了加快检索速度而建立的,所以,怎么用索引是数据库系统本身的事情,作为数据库设计或使用者,设计并创建好索引然后体验加上索引后的查询变快的感觉就行了。所以,索引怎么用就变为了“怎么创建...
    索引其实关键目的是为了加快检索速度而建立的,所以,怎么用索引是数据库系统本身的事情,作为数据库设计或使用者,设计并创建好索引然后体验加上索引后的查询变快的感觉就行了。所以,索引怎么用就变为了“怎么创建合适的索引”

    以下回答是否符合你的要求?你还有什么问题?


    第一次回答:
    一、索引是什么

    索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。

    表或视图可以包含以下类型的索引:

    * 聚集
    o 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。
    o 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
    * 非聚集
    o 非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
    o 从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。
    o 您可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制(900 字节和 16 键列),并执行完整范围内的索引查询。

    聚集索引和非聚集索引都可以是唯一的。这意味着任何两行都不能有相同的索引键值。另外,索引也可以不是唯一的,即多行可以共享同一键值。

    每当修改了表数据后,都会自动维护表或视图的索引。

    索引和约束

    对表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。有关详细信息,请参阅创建索引(数据库引擎)。


    二、索引有什么用

    与书中的索引一样,数据库中的索引使您可以快速找到表或索引视图中的特定信息。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。索引可以减少为返回查询结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。

    设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。对于包含 SELECT、UPDATE、DELETE 或 MERGE 语句的各种查询,索引会很有用。例如,在 AdventureWorks 数据库中执行的查询 SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250。执行此查询时,查询优化器评估可用于检索数据的每个方法,然后选择最有效的方法。可能采用的方法包括扫描表和扫描一个或多个索引(如果有)。

    扫描表时,查询优化器读取表中的所有行,并提取满足查询条件的行。扫描表会有许多磁盘 I/O 操作,并占用大量资源。但是,如果查询的结果集是占表中较高百分比的行,扫描表会是最为有效的方法。

    查询优化器使用索引时,搜索索引键列,查找到查询所需行的存储位置,然后从该位置提取匹配行。通常,搜索索引比搜索表要快很多,因为索引与表不同,一般每行包含的列非常少,且行遵循排序顺序。

    查询优化器在执行查询时通常会选择最有效的方法。但如果没有索引,则查询优化器必须扫描表。您的任务是设计并创建最适合您的环境的索引,以便查询优化器可以从多个有效的索引中选择。SQL Server 提供的数据库引擎优化顾问可以帮助分析数据库环境并选择适当的索引。

    三、索引怎么用

    索引其实关键目的是为了加快检索速度而建立的,所以,怎么用索引是数据库系统本身的事情,作为数据库设计或使用者,设计并创建好索引然后体验加上索引后的查询变快的感觉就行了。所以,索引怎么用就变为了“怎么创建合适的索引”,以下说明这个问题:

    索引设计不佳和缺少索引是提高数据库和应用程序性能的主要障碍。设计高效的索引对于获得良好的数据库和应用程序性能极为重要。为数据库及其工作负荷选择正确的索引是一项需要在查询速度与更新所需开销之间取得平衡的复杂任务。如果索引较窄,或者说索引关键字中只有很少的几列,则需要的磁盘空间和维护开销都较少。而另一方面,宽索引可覆盖更多的查询。您可能需要试验若干不同的设计,才能找到最有效的索引。可以添加、修改和删除索引而不影响数据库架构或应用程序设计。因此,应试验多个不同的索引而无需犹豫。

    SQL Server 中的查询优化器可在大多数情况下可靠地选择最高效的索引。总体索引设计策略应为查询优化器提供可供选择的多个索引,并依赖查询优化器做出正确的决定。这在多种情况下可减少分析时间并获得良好的性能。若要查看查询优化器对特定查询使用的索引,请在 SQL Server Management Studio 中的“查询”菜单上选择“包括实际的执行计划”。

    不要总是将索引的使用等同于良好的性能,或者将良好的性能等同于索引的高效使用。如果只要使用索引就能获得最佳性能,那查询优化器的工作就简单了。但事实上,不正确的索引选择并不能获得最佳性能。因此,查询优化器的任务是只在索引或索引组合能提高性能时才选择它,而在索引检索有碍性能时则避免使用它。

    建议的索引设计策略包括以下任务:

    1. 了解数据库本身的特征。例如,它是频繁修改数据的联机事务处理 (OLTP) 数据库,还是主要包含只读数据的决策支持系统 (DSS) 或数据仓库 (OLAP) 数据库?
    2. 了解最常用的查询的特征。例如,了解到最常用的查询联接两个或多个表将有助于决定要使用的最佳索引类型。
    3. 了解查询中使用的列的特征。例如,某个索引对于含有整数数据类型同时还是唯一的或非空的列是理想索引。筛选索引适用于具有定义完善的数据子集的列。
    4. 确定哪些索引选项可在创建或维护索引时提高性能。例如,对现有某个大型表创建聚集索引将会受益于 ONLINE 索引选项。ONLINE 选项允许在创建索引或重新生成索引时继续对基础数据执行并发活动。
    5. 确定索引的最佳存储位置。非聚集索引可以与基础表存储在同一个文件组中,也可以存储在不同的文件组中。索引的存储位置可通过提高磁盘 I/O 性能来提高查询性能。例如,将非聚集索引存储在表文件组所在磁盘以外的某个磁盘上的一个文件组中可以提高性能,因为可以同时读取多个磁盘。
    或者,聚集索引和非聚集索引也可以使用跨越多个文件组的分区方案。在维护整个集合的完整性时,使用分区可以快速而有效地访问或管理数据子集,从而使大型表或索引更易于管理。有关详细信息,请参阅已分区表和已分区索引。在考虑分区时,应确定是否应对齐索引,即,是按实质上与表相同的方式进行分区,还是单独分区。

    # 设计索引。
    索引设计是一项关键任务。索引设计包括确定要使用的列,选择索引类型(例如聚集或非聚集),选择适当的索引选项,以及确定文件组或分区方案布置。

    # 确定最佳的创建方法。按照以下方法创建索引:

    * 使用 CREATE TABLE 或 ALTER TABLE 对列定义 PRIMARY KEY 或 UNIQUE 约束
    SQL Server 数据库引擎自动创建唯一索引来强制 PRIMARY KEY 或 UNIQUE 约束的唯一性要求。默认情况下,创建的唯一聚集索引可以强制 PRIMARY KEY 约束,除非表中已存在聚集索引或指定了唯一的非聚集索引。默认情况下,创建的唯一非聚集索引可以强制 UNIQUE 约束,除非已明确指定唯一的聚集索引且表中不存在聚集索引。
    还可以指定索引选项和索引位置、文件组或分区方案。
    创建为 PRIMARY KEY 或 UNIQUE 约束的一部分的索引将自动给定与约束名称相同的名称。

    * 使用 CREATE INDEX 语句或 SQL Server Management Studio 对象资源管理器中的“新建索引”对话框创建独立于约束的索引
    必须指定索引的名称、表以及应用该索引的列。还可以指定索引选项和索引位置、文件组或分区方案。默认情况下,如果未指定聚集或唯一选项,将创建非聚集的非唯一索引。若要创建筛选索引,请使用可选的 WHERE 子句。

    # 创建索引。
    要考虑的一个重要因素是对空表还是对包含数据的表创建索引。对空表创建索引在创建索引时不会对性能产生任何影响,而向表中添加数据时,会对性能产生影响。
    对大型表创建索引时应仔细计划,这样才不会影响数据库性能。对大型表创建索引的首选方法是先创建聚集索引,然后创建任何非聚集索引。在对现有表创建索引时,请考虑将 ONLINE 选项设置为 ON。该选项设置为 ON 时,将不持有长期表锁以继续对基础表的查询或更新。

    简单的创建索引,可采用如下语句:
    CREATE INDEX IX_ProductVendor_VendorID
    ON Purchasing.ProductVendor (VendorID, VendorName);
    GO
    展开全文
  • 索引简介跟存储引擎很大关系其实就是一排序,生成一算法,索引主要用在大数据量的时候使用,数据小根本没必要 ...索引优化应该是最查询性能优化的最有效的手段了,索引能够轻易将查询性能提高好个...

    引简介  跟存储引擎有很大关系其实就是一种排序,生成一种算法,索引主要用在大数据量的时候使用,数据小根本没必要

    索引在mysql中也叫做键,是存储引擎用于快速找到记录的一种数据结构,索引对于良好的性能非常关键,尤其是当表中的数据量越来越大的时候,索引对于性能的影响越发重要。

    索引优化应该是最查询性能优化的最有效的手段了,索引能够轻易将查询性能提高好几个数量级。

    索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则要从几百页中逐页去查。

     

    索引优缺点

    优点

    加快访问速度

    加强行的唯一性

    缺点

    带索引的表在数据库中需要更多的存储空间

    操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新

     

    按照下列标准选择建立索引的列

    频繁搜索的列

    经常用作查询选择的列

    经常排序、分组的列

    经常用作联接的列(主键/外键)

    请不要使用下面的列创建索引

    仅包含几个不同值的列

    表中仅包含几行

     

     

    查询时减少使用*返回全部列,不要返回不需要的列

    索引应该尽量小,在字节数小的列上建立索引

    WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前

    避免在ORDER BY子句中使用表达式

    根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理

     

     

     

    索引的分类

    普通索引

    唯一索引 :主键本身就是一钟特殊的唯一索引

    全文索引

    单列索引

    多列索引

    空间索引

     

    准备实验环境

    批量插入记录:mysql>delimiter $$  //定义分隔符

    Mysql>Create procedure autoinsert1()   //创建存储过程

    Begin

    Declare i int default 1;

    While (1<200000)do

    Insert into school.t2 values(i,ccc); //这个表必须是事先存在的,

    Set i=i+1;

    End while;

    End$$

    Mysql>delimiter;//把分隔符还原回来

    Mysql>Call autoinsert1();  //调用存储过程

     

     

    创建索引(创建表时)注意事项:一开始就有索引会有个如果你批量导入数据的时候,因为某个字段上存在索引,所以速度会非常慢。

    语法:create table 表名(

    字段一 数据类型 [完整性约束条件.....],

    字段一 数据类型 [完整性约束条件.....],

    [unique|fulltext|spatial] index |key [索引名] (字段名[长度] [asc |desc])

    );

     

    创建普通索引创建表时实例:

    Create table department(

    Dept_id int primary key,

    Dept_name varchar(30),

    Commnet varchar(50),

    Index index_dept_name (dept_name)

    );

    查看索引:desc 表名或者show create table表名 \G

     

    创建唯一索引创建表时实例:

    Create table department(

    Dept_id int primary key,

    Dept_name varchar(30),

    Commnet varchar(50),

    Unique Index index_dept_name (dept_name)

    );

     

    创建全文索引创建表时实例:

    Create table department(

    Dept_id int primary key,

    Dept_name varchar(30),

    Commnet varchar(50),

    fulltext Index index_dept_name (dept_name)

    )engin=myisam;

     

    创建多列索引创建表时实例:

     

    Create table department(

    Dept_id int primary key,

    Dept_name varchar(30),

    Commnet varchar(50),

    Index index_dept_name (dept_name,commnet)

    );

    模拟查询分析查询语法

    Explain select * from dept 4 where commnet=sale \G

     

     

    创建索引(已存在的表create)

    复制表的内容和结构  t2表的所有数据复制到t4表上

    Create table t4 select * from t2;

     

    只复制表的结构  t2表的结构复制到t4表上

     

    Create table t4 select * from t2 where 1=2;

     

    或者create table t5 like t2;

     

     

     

    语法:create [unique|fullext|spatial] index 索引名 on 表名(字段名[(长度)][asc|desc]);

     

    创建普通索引实例:

    Create index index_dept_name on departmnet (dept_name);

    创建唯一索引实例:

    Create unique index index_dept_name on departmnet (dept_name);

    创建全文索引实例:

    Create fulltext index index_dept_name on departmnet (dept_name);

    创建多列索引实例:

    Create index index_dept_name on departmnet (dept_name,comment);

     

     

    创建索引(已存在的表alter table)

    语法:alter table 表名 add [unique|fullext|spatial] index 索引名 (字段名[(长度)][asc|desc]);

     

    创建普通索引实例:

    Alter table department add  index index_dept_name (dept_name);

     

    创建唯一索引实例:

    Alter table department add  unique index index_dept_name (dept_name);

     

    创建全文索引实例:

    Alter table department add  fulltext index index_dept_name (dept_name);

     

    创建多列索引实例:

    Alter table department add index index_dept_name (dept_name,comment);

     

    管理索引

    查看索引

    Show create table 表名\G

    测试示例

    EXPLAIN select * from department where dept_name=hr;

    删除索引

    Drop index 索引名 on 表名;

     

     

    视图简介:安全和简化操作

    Mysql视图是一张虚拟表,其内容由查询定义,同真实的表一样,视图包括一系列带有名称的列和行数据,但是视图并不在数据库中以存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,并且在引用视图的动态生成,对其中所引用的基础表来说,mysql视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图,通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

     

    视图是存储在数据库中的sql查询语句,它主要出于两种原因,安全原因,视图可以隐藏一些数据,如一些敏感的信息,另一原因是可以使复杂的查询便于理解和使用

    创建视图

    语法一

    Create [algorithm={undefined |merge|temptable}]

    View 视图名[(字段1,字段2.....)]  as select语句

    [with [caseaded|local] check option];

     

     

    语法二

    Create view 视图名 as select 语句;

     

     

     

    实例:

    Create database view; //创建一个数据库,建议创建

    Use view

    Create view view_user

    As select user,host,password from mysql.user;

    Select * from view_user;

     

     

    查看视图

    Show tables 查看视图名

    Use view;

    Show tables;

    Show tables status

    实例:查看view数据库中视图以及所有表详细信息

    Show table status from view\G

     

    实例:查看view数据库中视图名view_user详细信息

    Show table status from view like view_user \G

     

    查看视图定义信息

    Use view;

    Show create view view_user \G

     

    查看视图结构

    Use view;

    Desc view_user;

    修改视图

    方法一删除后创建

    Use view;

    Drop view view_user;

    Create view view_user as select user,host from mysqk.user;

    Select * from view_user;

     

     

    方法二:替换原有视图

    语法:create or replace view 视图名 as select 语句;

    实例:use view;

    Create or replace view view_user as select user,password from mysql.user;

     

    方法三:alter 修改视图

    语法:alter view 视图名 as select 语句;

    实例:use view;

    Alter view view_user as select user,password from mysql.user;

    通过视图操作基表

    查询数据 select    通常都是查询操作

    Select * from view_user;

    更新数据update

    删除数据delect

    删除视图

    Drop view 视图名

    实例:

    Use view;

    Drop view view_user;

     

     

    触发器简介

    触发器(triggers)是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由时间来触发,比如当对一个表进行操作(insert,delect,update)时就会激活它执行,触发器经常用于加强数据的完整约束和业务规则等

     

    例如:当学生表中增加一个学生的信息时,学生的总数就应该同时改变,因此可以针对学生表创建一个触发器,每次增加一个学生记录时,就执行一次学生总数的计算操作,从而保障学生总数和记录数一致性。

     

    创建触发器:同一张表最多可以创建六个触发器

    语法:create trigger 触发器名称 before|after 触发事件

    On 表名 for each row

    Begin

     触发器程序体;

    End

     

    触发器名称://最多64字符

    for each row //触发器的执行间隔,这句话的意思是指的是针对每一行,如果不加就是针对整张表

    Insert|update|delete//触发的事件

    On表名//在哪张表上建立触发器

    触发器程序体://触发器所触发的sql语句,语句可以使用顺序,判断,循环等语句,实现一般程序需要的逻辑功能。

     

     

    实例:

    创建表

    Create table student(

    Id int unsigned auto_incremnet primary key not null,

    Name varchar(50)

    );

    unsigned //无符号修饰符

    往表里插入数据

    Insert into student values(1,jack);

     

    创建表2总数表

    Create table student_total (total int);

     

     

    往数表中插入数据

    Insert into student_total values(1);

     

     

    创建触发器实例一student_insert_trigger

    Mysql>Delimiter && //定义结束符

    Mysql>Create trigger student_insert_trigger after insert 

    On student for each now

    Begin

    Upadte student_total set total=total+1;

    End&&

    Mysql>Delimiter ;

     

     

    创建触发器实例二

    Mysql>Delimiter && //定义结束符

    Mysql>Create trigger student_insert_trigger after delect

    On student for each now

    Begin

    Upadte student_total set total=total-1;

    End&&

    Mysql>Delimiter ;

     

     

    测试效果,往学生表中插入数据,查看总数表结果,

     

    Insert into student values(2,Alice);

    Select * from student_total ;

     

    查看触发器

    方法1通过show triggers语句查看

    案例:show triggers\G

    方法2通过系统表triggers查看

    案例:use information_schema

    Select * from triggers\G

    SELECT * FROM TRIGGERS WHERE TGIGGER_NAME=触发器名称\G

    删除触发器

    Drop trigger 触发器名称

    实例:Drop trigger student_insert_trigger;

    触发器的案例

    案例一:增加tab1表记录后自动将记录增加到tab2,能同步的字段的数据类型肯定要必须一致才行。

    创建tab1

    Drop table if exists tab1;

    Create table tab1(

    Tab1_id varchar(11)

    );

     

     

    创建tab2

    Drop table if exists tab2;

    Create table tab2(

    Tab2_id varchar(11)

    );

     

    触发器:after_tab1_trigger

    作用:增加tab1表记录后自动将记录增加到tab2

    Mysql>Delimiter && //定义结束符

    Mysql>drop trigger if exists tab1_after_trigger;

    Mysql>Create trigger tab1_after_trigger after insert

    On tab1 for each now

    Begin

    Insert into tab2(tab2_id) values (new tab1_id);  new关键字指的是tab1插入以后的新增值,在删除的时候就应该是用old关键字

    End&&

    Mysql>Delimiter ;

     

     

    案例三:

    当我们更新学生表学生信息的时候,我们学生更新表也对应的改变。

    创建表

    Drop table if exists student;

    Create table student(

    student_id int auto_incremnet primary key not null,

    Student varchar(30) not null,

    Student_sex enum(m,f) default m

    );

     

    插入数据:

    Insert into student values

    (1,jack,m),

    (2,robin,m),

    (3,alice,f);

     

     

    创建tab2

    Drop table if exists update_student;

    Create table update_student(

    Update_record int auto_incremnet primary key not null,

    Student_id int not null,

    Update_date date

    );

     

    插入数据:

    Insert into update_student values

    (1,1,now()),

    (2,2,now()),

    (3,3,now());

     

     

    创建触发器ustudent_trigger

    Mysql>Delimiter && //定义结束符

    Mysql>drop trigger if exists student_update_trigger;

    Mysql>Create trigger student_update_trigger before update

    On studnet for each now

    Begin

    If new.student_id!=old.student_id then

    Update update_student

    Set student_id=new.student_id

    Where student_id=old.student_id;

    End if;

    End&&

    Mysql>Delimiter ;

    改后的值叫new值,改之前叫做old值,这句话表示学生id被修改后,就会把学生id新值也会赋值给update_student

     

    删除同步操作案例

    Mysql>Delimiter && //定义结束符

    Mysql>drop trigger if exists student_delete_trigger;

    Mysql>Create trigger student_delete_trigger before delete

    On studnet for each now

    Begin

    Delete from update_student

    Where student_id=old.student_id;

    End&&

    Mysql>Delimiter ;

    本文转自    探花无情   51CTO博客,原文链接:http://blog.51cto.com/983865387/1917419


    展开全文
  • 所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。 视图一经定义,就可以和基本表一样被查询、删除。也...

    视图概述

    视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
    所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
    视图一经定义,就可以和基本表一样被查询、删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。

    视图只存定义,每次查看视图就相当于执行一次语句。

    视图的特点

    • 虚表,是从一个或几个基本表(或视图)导出的表,而不是一个实际的表
    • 只存放视图的定义,不存放视图对应的数据
    • 基表中的数据发生变化,从视图中查询出的数据也随之改变

    ⭐️关系的三种基本类型

    关系可以有三种类型:基本关系(又称基本表)、査询表和视图表

    基本表是实际存在的表,它是实际存储数据的逻辑表示;查询表是査询结果对应的表;视图表是由基本表或其他视图表导出的表,是表,不对应实际存储的数据。

    视图与表的区别

    先说结论:视图与select查询语句查询结果表并不是一回事。

    1. 视图是已经编译好的sql语句,而表不是。
    2. 视图没有实际的物理记录,而表有。
    3. 表是内容,视图是窗口
    4. 表占用实际物理空间而视图不占用物理空间,视图只在逻辑上存在
    5. 表可以随时进行任意修改,但视图的修改有很大限制。
    6. 表是模式,视图是外模式
    7. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
    8. 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
    9. 视图的建立和删除只影响视图本身,不影响对应的基本表。
    10. 视图是从一个或几个基本表(或视图)导出的虚表,而不是一个实际的表

    视图与查询表的区别

    视图是一种虚拟的表,是一个为了简化复杂查询语句的书写,另外也提高了数据库一定的安全性。

    查询是利用sql语句按照用户的需求自定义查询,更加灵活,查一次用一次。select查询的是一个结果集(元组的集合),视图是一个虚标。

    可以理解为表最稳定,一般就放在那里;有时候不想给别人看整张表,就弄一个视图,但也相对稳定一点;查询最不稳定,需要什么再临时查,非常灵活多变。

    [参考文章](

    展开全文
  • Oracle常见的数据库对象

    千次阅读 2017-06-18 13:38:54
    常见的数据库对象包括以下几种: table 表 基本的数据存储集合,由行和列组成。 view 视图 从表抽出的逻辑上相关的数据集合 sequence 序列 提供规律的数值。 index 索引 提高查询的效率 synonym 同义词 给...
  • 【赛迪网-IT技术报道】SQL Server数据库查询速度慢的原因很多,常见的以下几种:  1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)  2、I/O吞吐量小,形成了瓶颈效应。  3、没有...
  • 之前的版本一是JDBC与EL实现数据库数据在前端页面查询,此篇用MVC模式实现了分页查询,简单的MVC入门例子,博客很多全面且详细的解释,我摘要其中的段,首先一张简图可以了解MVC框架的执行原理: MVC模式(三...
  • 1、触发器的作用? 2、什么是存储过程?用什么来调用? 3、存储过程的优缺点? 4、存储过程与函数的区别 ...7、索引类型哪些?...9、什么叫视图?...10、视图的优缺点 ...13、在数据库中查询语句速度很慢,如...
  • 数据库面试

    2014-09-06 18:41:00
    5、sql循环几种形式(while、游标) 6、Sql Schema是什么? 7、说说数据库遵循的前三范式是什么? 8、请写出sql行转列以及列转行。 9、sql查询(with tree) 10、如何删除数据库的重复数据 11、...
  • MySQL视图

    2021-02-18 15:28:06
    视图并不在数据库中实际存在,行和列数据来自定义视图查询中使用的表。并且在使用视图时动态生成。 视图相对普通的表的优势以下项: 简单:使用视图不需要关心表结构、关联条件和筛选条件。对用户来说已经是...
  • MySQL视图简介

    2020-02-15 14:36:31
    视图是数据库系统中一非常有用的数据库对象。MySQL 5.0 之后的版本添加了对视图的支持。 认识视图 视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带名称的...视图不是数据库中真实的表...
  • 前言 视图是数据库系统中一非常有用的数据库对象。MySQL 5.0 之后的版本添加了对... 存储在数据库中查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据
  • 关于SQL视图的创建和使用方法

    千次阅读 2013-12-30 09:34:27
    视图这个东西在其他的软件,我们也经常看得到,例如word就有视图,我们不难发现,视图似乎是一种显示方式,就像WORD一样,有几种显示版面,这就是视图,那么SQL视图又该怎么定义呢?今儿我要学习一下,做个...
  • 1 MySQL 视图

    2019-09-05 22:43:36
    视图数据库系统中一非常有用的数据库对象。MySQL 5.0 之后的版本添加了对视图的支持。 1.1 认识视图 视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带名称的列和行数据,但视图并不是...
  • 在进行数据库恢复的过程,很多时候我们需要知道Oracle数据库的DBID,通常以下几种方法可以获得数据库的DBID. 1.查询v$database获得 由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就...
  • 在进行数据库恢复的过程,很多时候我们需要知道Oracle数据库的DBID,通常以下几种方法可以获得数据库的DBID.1.查询v$database获得由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就可以查询v$...
  • Laravel数据库之分页

    2020-11-21 18:11:05
    1.简介 在其他框架,分页可能会非常痛苦。...有几种分页项目的方法。 最简单的方法是使用查询构建器上的分页方法或Eloquent查询。 分页方法会根据用户正在查看的当前页面自动设置适当的限制和偏移量。 ...
  • 在进行数据库恢复的过程,很多时候我们需要知道Oracle数据库的DBID,通常以下几种方法可以获得数据库的DBID.1.查询v$database获得由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就可以查询v$...
  • 因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发...
  • SQL视图的概念和使用

    千次阅读 2017-12-13 19:16:47
    SQL视图的创建和使用视图这个东西在其他的软件,我们也经常看得到,例如word就有视图,我们不难发现,视图似乎是一种显示方式,就像WORD一样,有几种显示版面,这就是视图,那么SQL视图又该怎么定义呢?...
  • 视图和索引

    2014-04-28 13:51:41
    SQL SERVER 2008数据库系统,架构是用于存储数据库对象的一个命名空间,用于集中管理数据库对象子集,这样极大方便并简化了管理数据库对象。而视图查询数据的另一方法。索引是加快查询速度的有效手段,极大地...
  • 【机房重构】之数据库的操作

    千次阅读 热门讨论 2015-04-12 19:28:45
    机房敲到现在,就发现,想只靠一个VB过日子,那是不行的!瞧来瞧去,还是围着那个数据摆弄,为了摆弄更方便,sql...但是,视图并不在数据库中以存储的数据值集形式存在。视图可以由多张表的各个列名组成一张视图。这方
  • SQL视图的创建和使用

    2017-09-14 00:35:21
    视图这个东西在其他的软件,我们也经常看得到,例如word就有视图,我们不难发现,视图似乎是一种显示方式,就像WORD一样,有几种显示版面,这就是视图,那么SQL视图又该怎么定义呢?今儿我要学习一下,做个...
  • 第四部分简要介绍了xml、数据挖掘和数据仓库等几种新兴技术。  本书是高等院校计算机及相关专业本科生、研究生数据库系统课程的理想教材,也是对相关技术人员非常价值的参考书。 作译者  Ramez elmasri是世界...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 288
精华内容 115
关键字:

数据库中查询有几种视图