达梦数据库-索引的作用及应用


一、索引介绍

索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识(例如:ROWID 等聚集索引键)共同组成。在 DM 中,除了位图索引、位图连接索引、全文索引和空间索引外,索引数据都采用 B+ 树结构进行存储,在 DM 手册的其余地方都简称为 B 树。索引和表一样需要存储空间。
索引相当于一本书的目录,根据目录中的页码标识快速检索并定位到的查找内容。
索引可使 SQL 语句快速地定位到相关数据记录上。除了系统自动创建的聚集索引以外,其它索引均为可选项。
创建或删除一个索引,不会影响基表、数据库应用或其它索引。当插入、更改和删除相关表的行时,DM8 会自动管理索引。如果删除索引,所有的应用仍继续工作,但访问以前被索引了的数据时速度可能会变慢。

二、索引分类

从不同的角度可将索引分为五大类。

1 聚簇索引和非聚簇索引

物理存储角度进行分类,可分为聚集索引和非聚集索引

  • 聚集索引(又称为一级索引、主索引):聚集索引就是按照聚集索引键构造一棵 B+ 树,表数据存储在 B+ 树叶子节点上,通过定位索引可直接在 B+ 树中找到数据。每一个表有且只有一个聚集索引。
  • 非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在 B+ 树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在 B+ 树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找。每一个表可以有多个非聚集索引。

//创建表格T1,并插入数据。

CREATE TABLE T1 (ID int,NAME varchar(20),DEPARTMENT varchar(20));
INSERT INTO T1 VALUES(1'Zhang San', 'A部');
INSERT INTO T1 VALUES(2'Li Si', 'B部');
INSERT INTO T1 VALUES(3'Wang Wu', 'C部');
INSERT INTO T1 VALUES(4'Chen Liu', 'D部');

//创建聚集索引,索引键为ID。

CREATE CLUSTER INDEX C1 on T1(ID);

//创建非聚集索引,索引键为NAME。

CREATE INDEX S1 on T1(NAME);

//使用聚集索引进行查找

EXPLAIN SELECT * FROM  T1 WHERE ID=2;

在这里插入图片描述
//使用非聚集索引进行查找

EXPLAIN SELECT ID FROM  T1 WHERE NAME='Wang Wu';

在这里插入图片描述
//先使用非聚集索引进行查找,再通过非聚集索引关联上聚集索引进行二次查找

EXPLAIN SELECT DEPARTMENT FROM  T1 WHERE NAME='Chen Liu';

在这里插入图片描述
在这里插入图片描述

2 功能索引

索引功能角度进行分类,可分为唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引、普通索引

  • 唯一索引:索引数据根据索引键唯一;
  • 函数索引:包含函数/表达式的预先计算的值;
  • 位图索引:对低基数的列创建位图索引;
  • 位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;
  • 全文索引:在表的文本列上而建的索引。具体内容请参考第 18 章;
  • 空间索引:在空间数据上创建的索引,专用于 DMGEO 包中;
  • 数组索引:在一个只包含单个数组成员的对象列上创建的索引;
  • 普通索引:除了唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引以外的索引,均为普通索引。

3 虚索引和实索引

虚实角度进行分类,可分为虚索引和实索引

  • 虚索引:创建 PRIMARY KEY 主键约束或 UNIQUE 唯一约束时,系统会自动创建一个相关的唯一索引。因为不需要用户创建,因此称为虚索引。
  • 实索引:虚索引以外的索引均为实索引。

4 单列索引和复合索引

索引键值的个数进行分类,可分为单列索引和复合索引

  • 单列索引:只有一个索引键的索引。
  • 复合索引:含有多个索引键的索引。

5 全局索引和局部索引

分区的角度进行分类,可分为全局索引和局部索引。全局索引和局部索引均为二级索引,专门用于水平分区表中。
当分区子表个数较多、索引列的选择率较好、没有使用分区裁剪优化等因素时,执行计划会倾向于使用全局索引进行查询。但由于全局索引的日常维护成本高于局部索引。因此用户可根据实际应用场景权衡利弊之后再在全局索引和局部索引中进行选择。

  • 全局索引:全局索引是以整张表的数据为对象而建立的索引。
    指定 GLOBAL 关键字创建的索引即为全局索引。创建全局索引时,会在水平分区表的主表上创建全局索引和在每个子表上创建全局本地索引。索引数据存储在全局索引上。全局本地索引的命名规则为:INDEX+ 全局本地索引 ID_全局索引 ID。例如:全局索引 IDX1 的 ID 为 3504,全局本地索引的 ID 为 3506,那么全局本地索引的名称为 INDEX3506_3504。
    全局索引具体分为两种:全局非分区索引和全局分区索引。指定了 <PARTITION 子句 > 的索引即为分区索引。只有 DMDPC 功能支持分区索引。
  • 局部索引:局部索引是在分区表的每个分区上创建的索引。
    未指定 GLOBAL 关键字创建的索引即为局部索引。局部索引暂时不支持分区。创建局部索引时,会在水平分区表的主表上创建局部索引和在每个子表上创建子表局部索引。索引数据存储在子表局部索引上。

三、管理索引的原则

索引是与表相关的可选的结构(聚集索引除外),它能使对应于表的 SQL 语句执行得更快,因为有索引比没有索引能更快地定位信息。DM8 索引能提供访问表的数据的更快路径,可以不用重写任何查询而使用索引,其结果与不使用索引是一样的,但速度更快。
DM8 提供了几种最常见类型的索引,对不同场景有不同的功能,它们是:

  • 聚集索引:每一个普通表有且只有一个聚集索引;
  • 唯一索引:索引数据根据索引键唯一;
  • 函数索引:包含函数/表达式的预先计算的值;
  • 位图索引:对低基数的列创建位图索引;
  • 位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;
  • 全文索引:在表的文本列上而建的索引。
    索引在逻辑上和物理上都与相关的表的数据无关,作为无关的结构,索引需要存储空间。创建或删除一个索引,不会影响基本的表、数据库应用或其他索引。当插入、更改和删除相关的表的行时,DM8 会自动管理索引。如果删除索引,所有的应用仍继续工作,但访问以前被索引了的数据时速度可能会变慢。

1 在表中插入数据后创建索引

一般情况下,在插入或装载了数据后,为表创建索引会更加有效率。如果在装载数据之前创建了一个或多个索引,那么在插入每行时 DM8 都必须更改和维护每个索引,使得插入效率降低。

2 索引正确的表和列

使用下面的准则来决定何时创建索引:

  • 如果需要经常地检索大表中的少量的行,就为查询键创建索引;
  • 为了改善多个表的连接的性能,可为连接列创建索引;
  • 主键和唯一键自动具有索引,在外键上很多情况下也创建索引;
  • 小表不需要索引。

选取表中的索引列时可以考虑以下几点:

  • 列中的值相对比较唯一 ;
  • 取值范围大,适合建立索引;
  • CLOB 和 TEXT 只能建立全文索引、BLOB 不能建立任何索引。

3 为性能而安排索引列

在 CREATE INDEX 语句中列的排序会影响查询的性能。通常,将最常用的列放在最前面。
如果查询中有多个字段组合定位,则不应为每个字段单独创建索引,而应该创建一个组合索引。当两个或多个字段都是等值查询时,组合索引中各个列的前后关系是无关紧要的。但是如果是非等值查询时,要想有效利用组合索引,则应该按等值字段在前,非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。

4 限制每个表的索引的数量

一个表可以有任意数量的索引。但是,索引越多,修改表数据的开销就越大。当插入或删除行时,表上的所有索引也要被更改;更改一个列时,包含该列的所有索引也要被更改。因此,在从表中检索数据的速度和更新表的速度之间有一个折衷。例如,如果一个表主要仅用于读,则索引多就有好处;如果一个表经常被更新,则索引不宜多建。

5 估计索引大小和设置存储参数

创建索引之前先估计索引的大小能更好地促进规划和管理磁盘空间。可以用索引以及回滚段、重做日志文件的组合估计的大小来决定支持所期望的数据库所需的磁盘空间的大小。通过这些估计,就可以购买合适的硬件和做出其他正确的决定。
用单个索引估计的大小能更好地管理索引使用的磁盘空间。创建索引时,可以设置适当的存储参数,并改善使用该索引的应用的 I/O 性能。例如,假设在创建索引之前估计索引的最大大小,之后就可以在创建该索引时设置适当的存储参数,就能很少为表的数据段分配簇。并且,所有的该索引的数据都被保存在相对连续的磁盘空间扇区中,这就减少了使用该索引的磁盘 I/O 操作所需的时间。

6 为每个索引指定表空间

可以在除临时表空间、日志表空间和回滚段表空间外的其他任何表空间中创建索引,也可以在其索引的表的相同或不同的表空间中创建索引。如果表及其索引使用相同的表空间 能更方便地对数据库进行管理(如表空间或文件备份)或保证应用的可用性,因为所有有关的数据总是在一起联机。然而,将表及其索引放在不同的表空间(在不同磁盘上)产生的性能比放在相同的表空间更好,因为这样做减少了磁盘竞争。但是将表及其索引放在不同的表空间时,如果一个表上某索引所在的表空间脱机了,则涉及这张表的 SQL 语句可能由于执行计划仍旧需要使用被脱机的索引而不能成功执行。

四、创建索引

本节描述如何创建索引。用户必须具备该表的CREATE INDEX 数据库权限。

1 显示的创建索引

使用CREATE INDEX 语句显示地创建索引。例如:

CREATE INDEX idx_t1 ON t1(DEPARTMENT);

1.1 创建聚集索引

DM8 中表(列存储表和堆表除外)都是使用 B 树索引结构管理的,每一个普通表都有且仅有一个聚集索引,数据都通过聚集索引键排序,根据聚集索引键可以快速查询任何记录。
当建表语句未指定聚集索引键时,DM8 的默认聚集索引键是 ROWID。若指定索引键,表中数据都会根据指定索引键排序。
建表后,DM8 也可以用创建新聚集索引的方式来重建表数据,并按新的聚集索引排序。
**例:**先创建一个表,然后对其ID列创建聚簇索引

CREATE TABLE T2(ID INT , NAEM VARCHAR(10));
CREATE CLUSTER INDEX C_IDX_ID ON T2(ID);

新建聚集索引会重建这个表以及其所有索引,包括二级索引、函数索引,是一个代价非常大的操作。因此,最好在建表时就确定聚集索引键,或在表中数据比较少时新建聚集索引,而尽量不要对数据量非常大的表建立聚集索引。
创建聚集索引的约束条件:
(1)每张表中只允许有一个聚集索引,如果之前已经指定过 CLUSTER INDEX 或者指定了 CLUSTER PK,则用户新建立 CLUSTER INDEX 时系统会自动删除原先的聚集索引。但如果新建聚集索引时指定的创建方式(列,顺序)和之前的聚集索引一样,则会报错;
(2)指定 CLUSTER INDEX 操作需要重建表上的所有索引,包括 PK 索引;
(3)删除聚集索引时,缺省以 ROWID 排序,自动重建所有索引;
(4)若聚集索引是默认的 ROWID 索引,不允许删除;
(5)聚集索引不能应用到函数索引中;
(6)不能在列存储表上新建/删除聚集索引;
(7)建聚集索引语句不能含有 partition_clause 子句;
(8)在临时表上增删索引会使当前会话上临时 b 树数据丢失;、
(9)不支持在含有多媒体类型的表上新建聚集索引。

1.2 创建唯一索引

索引可以是唯一的或非唯一的。唯一索引可以保证表上不会有两行数据在键列上具有相同的值,非唯一索引不会在键列上施加这个限制。
可用 CREATE UNIQUE INDEX 语句来创建唯一索引。如:

CREATE UNIQUE INDEX U_IDX_NAEM ON T2(NAEM);

用户可以在希望的列上定义 UNIQUE 完整性约束,DM8 通过自动地在唯一键上定义一个唯一索引来保证 UNIQUE 完整性约束。

1.3 创建基于函数的索引

基于函数的索引促进了限定函数或表达式的返回值的查询,该函数或表达式的值被预先计算出来并存储在索引中。正确使用函数索引,可以带来以下好处:
创建更强有力的分类,例如可以用 UPPER 和 LOWER 函数执行区分大小写的分类;
预先计算出计算密集的函数的值,并在索引中将其分类。可以在索引中存储要经常访问的计算密集的函数,当需要访问值时,该值已经计算出来了。因此,极大地改善了查询的执行性能;
增加了优化器执行范围扫描而不是全表扫描的情况的数量。如:

CREATE TABLE T3(ID INT , ID1 INT, NAEM VARCHAR(10));
CREATE INDEX IDX_ID_PLUS_ID1 ON T3(ID+ID1);

因为该索引是建立在 column_a + column_b 之上的,所以优化器可以为该查询使用范围扫描。优化器根据该索引计算查询代价,如果代价最少,优化器就会选择该函数索引,column_a + column_b 就不会重复计算。
创建函数索引有以下约束条件:

  • 表达式不允许为时间间隔类型;
  • 表达式中不允许出现半透明加密列;
  • 函数索引表达式的长度理论值不能超过 816 个字符(包括生成后的指令和字符串);
  • 函数索引不能为 CLUSTER 或 PRIMARY KEY 类型;
  • 表达式不支持集函数和不确定函数,不确定函数为每次执行得到的结果不确定,系统中不确定函数包括:RAND、SOUNDEX、CURDATE、CURTIME、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、GETDATE、NOW、SYSDATE、CUR_DATABASE、DBID、EXTENT、PAGE、SESSID、UID、USER、VSIZE、SET_TABLE_OPTION、SET_INDEX_OPTION、UNLOCK_LOGIN、CHECK_LOGIN、GET_AUDIT、CFALGORITHMSENCRYPT、SF_MAC_LABEL_TO_CHAR、CFALGORITHMSDECRYPT、BFALGORITHMSENCRYPT、SF_MAC_LABEL_FROM_CHAR、BFALGORITHMSDECRYPT、SF_MAC_LABEL_CMP;
  • 快速装载不支持含有函数索引的表;
  • 若函数索引中要使用用户自定义的函数,则函数必须是指定了 DETERMINISTIC 属性的确定性函数;
  • 若函数索引中使用的确定性函数发生了变更或删除,用户需手动重建函数索引;
  • 若函数索引中使用的确定性函数内有不确定因素,会导致前后计算结果不同的情况。在查询使用函数索引时,使用数据插入函数索引时的计算结果为 KEY 值;修改时可能会导致在使用函数索引过程中出现根据聚集索引无法在函数索引中找到相应记录的情况,对此进行报错处理;
  • 临时表不支持函数索引。

1.4 创建位图索引

位图索引主要针对含有大量相同值的列而创建。位图索引被广泛引用到数据仓库中,创建方式和普通索引一致,对低基数(不同的值很少)的列创建位图索引,能够有效提高基于该列的查询效率。且执行查询语句的 where 子句中带有 AND 和 OR 谓词时,效率更加明显。
如:

CREATE BITMAP INDEX B_IDX_NAME ON T3(NAEM);

位图索引具有以下约束:
(1)支持普通表、堆表和水平分区表创建位图索引;
(2)不支持对大字段创建位图索引;
(3)不支持对计算表达式列创建位图索引;
(4)不支持在 UNIQUE 列和 PRIMARY KEY 上创建位图索引;
(5)不支持对存在 CLUSTER KEY 的表创建位图索引;
(6)仅支持单列或者不超过 63 个组合列上创建位图索引;
(7)MPP 环境下不支持位图索引的创建;
(8)不支持快速装载建含有位图索引的表;
(9)不支持全局位图索引;
(10)包含位图索引的表不支持并发的插入、删除和更新操作。

1.5 创建位图连接索引

位图连接索引是一种提高通过连接实现海量数据查询效率的有效方式,主要用于数据仓库环境中。区别于上一节所说的建立在单表上的位图索引,位图连接索引是针对两个或者多个表的连接而建立的位图索引,同时保存了连接的位图结果。对于索引列中的每一个值,位图连接索引在索引表中保存了对应行的 ROWID。

create bitmap index SALES_CUSTOMER_NAME_IDX on SALES.SALESORDER_HEADER(SALES.CUSTOMER.PERSONID) from   SALES.CUSTOMER, SALES.SALESORDER_HEADER  where  SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID;

2 隐式地创建索引

隐式创建方式只支持创建唯一索引。
DM8 通过在唯一键或主键上创建一个唯一索引来在表上实施 UNIQUE KEY 或 PRIMARY KEY 完整性约束。当启用约束时 DM8 自动创建该索引。如下面的语句会自动在表 emp 的 name 列上创建一个唯一索引。

CREATE TABLE T1(C1 INT, C2 INT, C3 INT);
ALTER TABLE T1 ADD CONSTRAINT PK_EMP_NAME PRIMARY KEY (C1);

五、在 SQL 语句中使用索引

如果 SQL 语句想使用某一个索引,则 SQL 语句的查询项和 WHERE 子句的过滤项中必须包含该索引的全部索引键。当同时包含了多个索引的索引键时,系统会选择一个最优的索引进行查询。例如:SQL 语句“SELECT A FROM T WHERE B=1; ”会使用建立在(A,B)列上的索引。
总体来说,最少的查找即可得到所需数据,即为最优索引。
下面用具体的示例进行介绍。
数据准备:

CREATE TABLE T2 (ID int,NAME varchar(20),DEPARTMENT varchar(20),SALARY INT);
CREATE CLUSTER INDEX S21 on T2(ID);
CREATE INDEX S22 on T2(NAME,DEPARTMENT);
CREATE INDEX S23 on T2(NAME);
CREATE INDEX S24 on T2(DEPARTMENT);
CREATE INDEX S25 on T2(SALARY);

例 1 使用聚集索引 S21

EXPLAIN SELECT SALARY FROM T2 WHERE ID=10;

在这里插入图片描述
例 2 使用非聚集索引 S22
查询语句想使用索引 S22,则 SELECT 查询项和 WHERE 子句过滤项需包含 S22 的全部索引键 NAME 和 DEPARTMENT。

EXPLAIN SELECT DEPARTMENT FROM T2 WHERE NAME LIKE'%Zhang' AND DEPARTMENT='A部门';

在这里插入图片描述

EXPLAIN SELECT DEPARTMENT FROM T2 WHERE NAME='Zhang San';

在这里插入图片描述
例 3 先使用非聚集索引 S23,再使用聚集索引
首先,在 SSEK 中使用 S23 非聚集索引进行扫描定位,得到 NAME;
其次,因为 SELECT * 中查询项太多,需要在 BLKUP2 中通过 S23 回到聚集索引上进行二次查找,得到*中的其它数据。

EXPLAIN SELECT * FROM T2 WHERE NAME='Zhang San';

在这里插入图片描述

六、重建索引

当一个表经过大量的增删改操作后,表的数据在物理文件中可能存在大量碎片,从而影响访问速度。另外,当删除表的大量数据后,若不再对表执行插入操作,索引所处的段可能占用了大量并不使用的簇,从而浪费了存储空间。
可以使用重建索引来对索引的数据进行重组,使数据更加紧凑,并释放不需要的空间,从而提高访问效率和空间效率。DM8 提供的重建索引的系统函数为:

  SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);

SCHEAM_NAME 为索引所在的模式名,INDEX_ID 为索引 ID。
使用说明:
(1)水平分区子表,临时表和系统表上建的索引不支持重建
(2)虚索引和聚集索引不支持重建
例 需要重建索引 emp_name,假设其索引 ID 为 1547892,那么使用以下语句重建索引:

SP_REBUILD_INDEX('SYSDBA', 1547892);

七 删除索引

用户可能出于以下某项原因需要删除一个索引:
(1)不再需要该索引;
(2)该索引没有为针对其相关的表所发布的查询提供所期望的性能改善。例如,表可能很小,或者尽管表中有许多行但只有很少的索引项;
(3)应用没有用该索引来查询数据。
要想删除索引,则该索引必须包含在用户的模式中或用户必须具有 DROP ANY INDEX 数据库权限。索引删除之后,该索引的段的所有簇都返回给包含它的表空间,并可用于表空间中的其他对象。
如何删除索引,取决于是否是用 CREATE INDEX 语句明确地创建该索引的,是则可以用 DROP INDEX 语句删除该索引。
下面的语句删除 emp_ename 索引

DROP INDEX emp_ename;

删除不存在的索引会报错。若指定 IF EXISTS 关键字,删除不存在的索引,不会报错,例如:

DROP INDEX IF EXISTS emp_ename;

然而,不能直接删除与已启用的 UNIQUE KEY 键或 PRIMARY KEY 键约束相关的索引。要删除一个与约束相关的索引,必须停用或删除该约束本身。
例 下面的语句删除主键约束 pk_emp_name,同时删除其对应的索引

ALTER TABLE emp DROP CONSTRAINT pk_emp_name;

除了删除普通索引,DM8 还提供删除聚集索引,只要其聚集索引是通过 CREATE CLUSTER INDEX 明确建立的。
例 下面的语句删除 emp 表的聚集索引 clu_emp_name

DROP INDEX clu_emp_name;

删除聚集索引其实是使用 ROWID 作为索引列重建聚集索引,即跟新建聚集索引一样会重建这个表以及其所有索引。
删除表就自动删除了所有与其相关的索引。

八 查看索引信息

创建索引后,可以通过 INDEXDEF 系统函数查看索引的定义。

INDEXDEF(INDEX_ID int, PREFLAG int);

INDEX_ID 为索引 ID,PREFLAG 表示返回信息中是否增加模式名前缀。
例 需要查看索引 emp_name 的定义,假设其索引 ID 为 1547892,那么使用以下语句查看索引定义

SELECT INDEXDEF(1547892, 0);SELECT INDEXDEF(1547892, 1);

社区地址:https://eco.dameng.com/

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子查询 定量比较 带 谓词的子查询 多列表子查询 查询结果的合并 和 子句的使用 子句的使用 子句 选取前儿条数据 选取其屮几条数据 全文检索 层次查询 层次查询子句 层次查询相关伪列 层次查询相关操作符 层次查询相关函数 查看执行计划 第章数据的插入、删除和修改 数据插入语句 数据修改语句 数据删除语句 伪列的使用 和 自增列的使用 自增列定义 属性 第章视图 视图的作用 视图的定义 视图的删除 视图的查询 视图数据的更新 第章嵌入式 前缀和终结符 宿主变量 输入和输出变量 指示符变量 服务器登录与退出 登录服务器 退出服务器 游标的定义与操纵 定义游标语句 打开游标语句 拨动游标语句 关闭游标语句 关于可更新游标 游标定位删除语句 游标定位修改语句 单元组查询语句 动态 立即执行语句 准备语句 执行语句 异常处理 第章函数 数值函数 字符串函数 日期时间函数 空值判断函数 类型转换函数 杂类函数 系统函数 存储加密函数 标记处理函数 备份恢复函数 附加分离数据库 第章一致性和并发性 事务相关语句 事务的开始 事务的结束 保存点相关语句 设置事务隔离级及读写特性 手动上锁语句 第章存储模块 存储模块的定义 存储模块的删除 存储模块的控制语句 语句块 赋值语句 条件语句 循环语句 语句 调用语句 语句 语句 语句 语句 打印语句 存储模块的异常处理 异常变量的说明 异常的抛出 异常处理器 异常处理用法举例 存储模块的语句 游标 动态 游标变量 返回查询结果集 语句应用举例 客户端存储模块 子过程、子函数 子过程 子函数 记录类型 记录类型定义 记录赋值 第章触发器 触发器的定义 触发器类型 触发器激发顺序 新、旧行值的引用 触发器谓词 变异表 设计触发器的原则 触发器的删除 禁止和允许触发器 触发器应用举例 使用触发器实现审计功能 使用触发器维护数据完整性 使用触发器保障数据安全性 使用触发器派生字段值 第章安全管理 创建角色语句 删除角色语句 授权语句数据库权限 授权语句对象权限 授权语句角色权限 回收权限语句数据库权限 回收权限语句对象权限 回收权限语句角色权限 策略与标记管理 创建策略 修改策略 删除策略 安全标记 用户标记设置语句 表标记设置语句 审计设置语句 审计取消语句 审计信息查阅语句 审计分析 创建审计分析规则 删除审计分析规则 加密引擎 创建加密引擎 修改加密引擎 删除加密引擎 第章外部链接 创建外部链接 删除外部链接 使用外部连接进行远程对象操作 第章备份还原 备份数据库 还原数据库 第章包 创建包 创建包规范 创建包主体 删除包 删除包规范 删除包主体 应用实例 第章同义词 创建同义词 删除同义词 附录关键字和保留字 附录 语法描述说明 附录命令参考 附录系统存储过程和函数 附录技术支持 第1章结构化查询语言简介 第章结构化查询语言 简介 结构化查询语言 是在年提出的一种关系数据库语言。 由于语言接近英语的语句结构,方便简洁、使用灵活、功能强人,倍受用户及计算机工业 界的欢迎,被众多计算机公司和数据库厂商所采用,经各公司的不断修改、扩充和完善,语 言最终发展成为关系数据库的标准语言。 的第一个标准是年月由美国国家标准化组织公布的 数据库语言 简称 年国际标准化组织也通过了这一标准。以后通过对 的不断修改和完善,于年第二次公布了标准 年又公布了标准 即 。最新的标准是 (也称 年作为 《信息技术——数据库语言》发布。我国也相继 公布了数据库语言的国家标准。 成为国际标准以后,其影响远远超出了薮据库领域。例如在 软件工程、人工智 能、分布式等领域,人们不仅把作为检索数据的语言规范,而且也把作为检索图形、 图象、声音、文字等信息类型的语言规范。目前,世界上大型的著名数据库管理系统均支持 语言,如 等。在未来相当长的时间里,仍将是数据库领 域以至信息领域中数据处理的主流语言之 由于不同的产品,大都按自己产品的特点对语言进行了扩充,很难完全符合 标准。目前在 市场上已将的符合夲作为衡量产品质量的重要指标,并研制成专门的 测试软件,如 目前, 入门级和过渡级的符合率均达到,并且部分支持 更新的 标准。同时还兼容 和 的部分语言特性。本章主要 介绍系统所支持的语言 语 语言的特点 语言符合结构化査询语言标准,是标准的扩充。它集数据定乂、数据査 询、薮据操纵和数据控制于一体,是一种统一的、综合的关系数据库语言。它功能强大,使用简 单方便、容易为用户掌握 语言具有如下特点: 功能一体化 的功能一体化表现在以下两个方面 支持多媒体数据类型,用户在建表时可直接使用。系统在处理常规数据与 多媒体数据时达到了四个一体化:一体化定义、一体化存储、一体化检索、一体化处理,最大限 度地提高了数据库管理系统处理多媒体的能力和速度; 语言集数据库的定义、査询、更新、控制、维护、恢复、安全等一系列操作于 体,每一项操作都只需一种操作符表示,格式规范,风格一致,简单方便,很容易为用户所掌 握 两种用户接口使用统一语法结构的语言 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能独立运行于联机交 互方式。作为嵌入式语言, 浯句能够嵌入到和语言程序中,将高级语言也称主 语言灵活的表达能力、强大的计算功能与 语言的数据处理功能相结合,完成各种复杂 的事务处理。而在这两种不同的使用方式中, 语言的语法结构是一致的,从而为用户使 第1章结构化查询语言简介 用提供了极大的方使性和灵活性。 高度非过程化 语言是·种非过程化语言。用户只需指出“做什么”,而不需指出“怎么做”,对数 据存取路径的选择以及 语句功能的实现均由系统自动完成,与用户编制的应用程序与 具体的机器及关系 的实现细节无关,从而方便了用户,提高了应用程序的开发效率,也 增强了数据独立性和应用系统的叮移植性。 面向集合的操作方式 语言采用了集合操作方式。不仅查询结果可以是元组的集合,而且一次插入、删除、 修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来 语言的使用简化了用户的处理,提高了应用程序的运行效率 语言简洁,方便易学 语言功能强大,格式规范,表达简洁,接近英语的语法结构,容易为用户所掌握。 保留字与标识符 标识符的语法规则兼容标准 ,标识符分为正规标识符和定界标识符两大类。 正规标识符以字母、、、或汉字开头,后面可以跟随字母、数字、、、或者汉字,正 规标识符的最大长度是个英文字符或个汉字。正规标识符不能是保留字 正规标识符的例子:, 表 定界标识符的标识符体用双引号括起来时,标识符体可以包含任意字符,特别地,其中使用 连续两个双引号转义为一个双引号 定界标识符的例子: 保留字的清单参见附录 语言的功能及语句 语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、查询 操纵和控制四个方面,通过各种不同的语句米实现。按照所实现的功能, 语句分 为以下几种 数据库、登录、用户、模式、基表、视图、索引、序列、全文索引、存储过程和触发器 的定义和删除语句,登录、基表、视图、仝文索引的修改语句,对象的更名语句; 査询(含全文检索)、插入、删除、修改语句; 数据库安全语句。包括创建角色语句、删除角色语句,授权语句、回收权限语句,修改 登录口令语句,审计设置语句、取消审计设置语句等。 在嵌入方式中,为了协调 语言与主语言不同的数据处理方式 语言引入 了游标的概念。因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发控制机制 语言提供 了事务的回滚( )与提交( )语句。同时允许选择实施事务级读一致 性,它保证同一事务内的可重复读,为此提供用户多种手动上锁语句,和设置事务隔离级别 第1章结构化查询语言简介 语句 所支持的数据类型 数据类型是可表示值的集。值的逻辑表示是字值。值的物理表示依赖于实现。系统具 有 的绝大部分数据类型,以及部分 和 的数据类型。 常规数据类型 字符数据类型 类型 语法:长度 功能: 数据类型指定定长字符串。在基表中,定义 类型的列时,可以指 定一个不超过的正整数作为字符长度,例如 如果未指定长度,缺省为。 确保存储在该列的所有值都具有这一长度。 数据类型的最大长度由数据库页面大 小决定,字符类型最大长度和页面大小的对应关系请见下表支持按字节存放字符 串 表 数据库页面大 最大长度 类型 语法: 长度 功能:与 相同。 类型 语法: 长度 功能 数据类型指定变长字符串,用法类似 数据类型,可以指定一 个不超过的正整数作为字符长度,例如: 。如果未指定长度,缺省为 在系统中, 数据类型的实际最大长度由数据库页面大小决定,具体最 大长度算法如表 的区别在于前者长度不足时,系统自动填充空 格,而后者只占用实际的字节空间。 表 数据库页面大 实际最大长度 注:这个限制长度只针对建表的情况,在定义变量的时候,可以不受这个限制长度的限 制 数值数据类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值