Oralce数据库SQL(结构化查询语句)详细归类以及使用方法举例(针对表)

本文详细介绍了SQL语言中的四大核心指令:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)及TCL(事务控制语言)。通过具体示例展示了如何创建、修改、查询和控制数据库中的数据。

1)DDL(Data Definition Language)数据定义语言

a.create

创建表:create table tname(colName1 Datatype,coluName2 Datatype,……);

说明:此关键字不光可以用来创建表,还可以用来操作,序列(sequence)、视图(view)、索引(index)

b.alter

修改表结构:

  1. 增加表的字段:alter table tName add (colName Datatype);
  2. 删除表的字段:alter table tName drop column colName;
  3. 修改表的字段名称:alter table tName rename oldName to newName;
  4. 修改表的字段类型:alter table tName modify colName Datatype;

c.truncate

清空表中的数据但是保留表结构:

truncate table tName;

d.drop

删除表结构:

drop table tName;

说明:此关键字不光可以删除表,还可以用来删除索引(index)、序列(sequence)、视图(view)、存储过程(procedure)、函数(function)、触发器(trigger),使用方法类似。

2)DML(Data Manipulation Language):数据操纵语言

a.insert

插入数据:insert into tName(colName1,colName2,……) values(值1,值2,……)

说明:插入全部表中的数据,tName(后面可以写表中的字段)

b.update

修改数据:update tName set colName1 = 值,colName2 = 值,…… where 条件

c.delete

删除数据:delete from tName where 条件 
说明:不添加条件的时候,删除表中的所有的数据,功能类似truncate

3)DQL(Data Query Language):数据查询语言

select

查询数据:select * from tName where 条件

说明:不写条件查询所有的数据,*为通配符表示全部字段,也可写表中具体的字段名称

4)TCL(Transaction Control Language):事务控制语言

a.commit:数据提交

可以直接使用

b.rollback:数据回滚

可以直接使用

c.savepoint:保存还原点

可以直接使用

5)DCL(Data Control Language):数据控制语言

a.grant授权操作

给普通用户创建视图的权利:grant create view to 用户名

b.revoke撤销权限

撤销用户创建视图的权利:revoke create view from 用户名

c.create user创建用户

create user 用户名 identified by 密码;

说明:其中用户名需要为英文,密码为数字或字母或英文符号或组合

<think>好的,我现在需要回答用户关于Oracle数据库中索引类型为NORMAL的具体含义和使用场景的问题。首先,我需要回顾用户提供的引用内容和之前我的回答,确保信息准确且一致。 用户提供的引用中,引用[3]提到“function-Based索引可能是一个好的选择。是B-tree的一个衍生物,它的变化就是列在索引中的存储方式从升序变成了降序。在oracle索引视图中查看到索引类型是function-based normal.” 这里提到索引类型显示为function-based normal,可能让用户对NORMAL这个类型产生疑问。同时,引用[4]提到查询索引时,可以通过user_indexes视图,其中索引类型可能包括NORMAL,但未详细解释。 用户的问题明确询问NORMAL类型的定义和使用场景。我需要确定在Oracle中,NORMAL具体指代什么。根据之前的回答,B树索引是默认类型,而函数索引在视图中可能被标记为FUNCTION-BASED NORMAL,这可能意味着NORMAL是B树索引的一种示方式。 接下来,我需要检查Oracle官方文档或可靠资料确认NORMAL索引类型的具体含义。根据知识,Oracle中的索引类型在user_indexes视图中的INDEX_TYPE列可能显示为NORMAL,这通常代标准的B树索引。而函数索引或基于函数的索引可能显示为FUNCTION-BASED NORMAL,降序索引可能显示为NORMAL/REV,反向索引为BITMAP等。 需要明确区分NORMAL作为索引类型和FUNCTION-BASED NORMAL的区别。用户可能混淆了这两种情况,因此需要详细解释,说明NORMAL通常指B树索引,而函数索引是B树的变体,但在视图中被归类为FUNCTION-BASED NORMAL。 此外,用户可能想知道在创建索引时如何指定NORMAL类型,但实际上默认创建的B树索引就是NORMAL类型,无需特别声明。需要举例说明创建普通B树索引和函数索引时的区别,以及它们在视图中的显示方式。 最后,总结使用场景,说明NORMAL索引适用于常规查询,而函数索引适用于达式或函数处理后的查询优化。需要确保回答结构清晰,引用用户提供的引用内容,并添加适当的引用标识。</think>### Oracle索引类型"NORMAL"详解 --- #### **一、定义解析** 在Oracle数据库中,**索引类型"NORMAL"** 在系统视图`USER_INDEXES`/`DBA_INDEXES`中示**标准B树索引(B-Tree Index)**[^4]。这是Oracle默认的索引类型,无需特殊声明,直接通过`CREATE INDEX`语句创建。 ```sql -- 创建NORMAL类型的B树索引(默认) CREATE INDEX idx_emp_name ON employees(last_name); ``` --- #### **二、核心特征** 1. **物理结构** - 基于平衡树(B-Tree)实现,支持高效的范围查询(`>`、`<`、`BETWEEN`)和精确查询(`=`)。 - 索引键值按升序(默认)或降序(需显式指定`DESC`)存储。 2. **系统视图标识** - 在`USER_INDEXES`视图中,`INDEX_TYPE`列为**NORMAL**时,示标准B树索引: ```sql SELECT index_name, index_type FROM user_indexes WHERE table_name = 'EMPLOYEES'; ``` ``` INDEX_NAME INDEX_TYPE --------------- ----------- IDX_EMP_NAME NORMAL ``` 3. **衍生变体** - **函数索引(Function-Based)**:基于达式或函数创建的索引,在视图中标记为**FUNCTION-BASED NORMAL**[^3]。 ```sql CREATE INDEX idx_upper_name ON employees(UPPER(last_name)); -- 函数索引 ``` ``` INDEX_NAME INDEX_TYPE ------------------- ------------------- IDX_UPPER_NAME FUNCTION-BASED NORMAL ``` --- #### **三、使用场景** | 场景分类 | 具体应用 | |-------------------|--------------------------------------------------------------------------| | **精确查询** | 主键查询、唯一性约束字段查询(如`WHERE employee_id = 1001`) | | **范围扫描** | 日期范围过滤(如`WHERE order_date BETWEEN '2024-01-01' AND '2024-06-30'`) | | **排序优化** | 避免全排序(如`ORDER BY last_name`时直接利用索引顺序) | | **多列组合查询** | 组合索引支持多条件联合过滤(需遵循最左前缀原则)[^2] | --- #### **四、与其他索引类型的对比** | 索引类型 | 标识(INDEX_TYPE) | 典型应用场景 | 示例语句 | |-------------------|--------------------|----------------------------------------|------------------------------------| | **NORMAL** | NORMAL | 常规查询(主键、范围、排序) | `CREATE INDEX idx_name ON table(col)` | | **FUNCTION-BASED**| FUNCTION-BASED NORMAL | 基于函数/达式的查询优化 | `CREATE INDEX idx_upper ON table(UPPER(col))` | | **BITMAP** | BITMAP | 低基数列的快速过滤(OLAP场景) | `CREATE BITMAP INDEX idx_status ON table(status)` | | **REV** | NORMAL/REV | 缓解顺序插入的热块竞争(如自增主键) | `CREATE INDEX idx_rev ON table(col) REVERSE` | --- #### **五、性能注意事项** 1. **索引选择性** - **高基数字段**(如用户ID)适合创建NORMAL索引,低基数字段(如性别)优先考虑位图索引[^1][^4]。 2. **维护成本** - DML操作(增删改)会触发B树索引的平衡调整,频繁写入场景需评估索引必要性。 3. **索引失效** - 对索引列进行函数操作可能导致索引失效(如`WHERE UPPER(name) = 'JOHN'`需依赖函数索引)[^3]。 --- #### **六、实践案例** **问题**:如何验证NORMAL索引是否生效? **步骤**: 1. 检查执行计划: ```sql EXPLAIN PLAN FOR SELECT * FROM employees WHERE last_name = 'Smith'; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); ``` 2. 观察输出中是否出现`INDEX RANGE SCAN`或`INDEX UNIQUE SCAN`。 --- ### 相关问题 1. 如何通过系统视图区分普通B树索引和函数索引? 2. 在哪些情况下NORMAL索引可能无法提升查询性能? 3. 如何重建或优化已碎片化的NORMAL索引? [^1]: 位图索引适用于低基数字段,但会因DML操作导致锁争用 [^2]: 组合索引需按最左前缀原则设计字段顺序 [^3]: 函数索引需与实际查询条件中的达式完全匹配 [^4]: 标准B树索引在`USER_INDEXES`中标记为NORMAL类型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值