Oracle数据库的一些简单概念
1.模式对象
RDBMS 的一个特征是物理数据存储与逻辑数据结构的独立性。
在 Oracle 数据库中,数据库模式是逻辑数据结构或模式对象的集合。数据库用户拥有一个与用户名同名的数据库模式。
模式对象是用户创建的结构,直接引用数据库中的数据。数据库支持多种类型的模式对象,其中最重要的是表和索引。
1.1.表
一个表描述了一个实体,例如员工。
您使用表名定义一个表,例如employees和一组列。通常,您在创建表时为每一列指定名称、数据类型和宽度。
表是一组行。列标识表所描述的实体的属性,而行标识实体的实例。例如,员工实体的属性对应于员工 ID 和姓氏的列。一行标识特定员工。
您可以选择为列指定称为完整性约束的规则。例:NOT NULL完整性约束。此约束强制列在每一行中都包含一个值。
1.2.索引
索引是一种可选的数据结构,您可以在表的一个或多个列上创建它。索引可以提高数据检索的性能。
在处理请求时,数据库可以使用可用的索引来有效地定位请求的行。当应用程序经常查询特定行或行范围时,索引很有用。
索引在逻辑上和物理上独立于数据。因此,您可以删除和创建索引,而不会影响表或其他索引。删除索引后,所有应用程序都会继续运行。
更详细的索引内容可以看:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/indexes-and-index-organized-tables.html#GUID-DE7A95BC-6E4A-47EA-9FC5-B85B54F8CF41
2.数据访问
DBMS 的一般要求是遵守公认的数据访问语言行业标准。
2.1.SQL
SQL 是一种基于集合的声明性语言,它为 RDBMS(如 Oracle 数据库)提供接口。
诸如 C 之类的过程语言描述了应该如何做事。SQL 是非过程的,它描述了应该做什么。
SQL 是关系数据库的 ANSI 标准语言。对 Oracle 数据库中数据的所有操作都是使用 SQL 语句执行的。例如,您使用 SQL 创建表以及查询和修改表中的数据。
SQL 语句可以被认为是一个非常简单但功能强大的计算机程序或指令。用户指定他们想要的结果(例如,员工的姓名),而不是如何得出结果。SQL 语句是一串 SQL 文本,如下所示:
SELECT first_name, last_name FROM employees;
SQL 语句使您能够执行以下任务:
查询数据
在表中插入、更新和删除行
创建、替换、更改和删除对象
控制对数据库及其对象的访问
保证数据库的一致性和完整性
SQL 以一种一致的语言统一了上述任务。Oracle SQL是 ANSI 标准的实现。Oracle SQL 支持许多超出标准 SQL 的特性。
更多SQL信息请看:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/sql.html#GUID-DA48618A-A6BB-421A-A10A-02859D8ED9AD
2.2.PL/SQL和JAVA
PL/SQL是 Oracle SQL 的过程扩展。
PL/SQL 与 Oracle 数据库集成,使您能够使用所有 Oracle 数据库 SQL 语句、函数和数据类型。您可以使用 PL/SQL 来控制 SQL 程序的流程、使用变量以及编写错误处理程序。
PL/SQL 的一个主要优点是能够将应用程序逻辑存储在数据库本身中。PL/SQL 过程或函数是一个模式对象,它由一组 SQL 语句和其他 PL/SQL 构造组成,组合在一起,存储在数据库中,并作为一个单元运行以解决特定问题或执行一组相关任务。服务器端编程的主要好处是可以在任何地方部署内置功能。
Oracle 数据库还可以存储用 Java 编写的程序单元。Java 存储过程是发布到 SQL 并存储在数据库中以供一般使用的 Java 方法。您可以从 Java 调用现有的 PL/SQL 程序,从 PL/SQL 调用 Java 程序。
关于PLSQL和JAVA更多内容请看:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/server-side-programming.html#GUID-D4A154D2-DF56-45DA-863C-BED5DA6BDA34
https://docs.oracle.com/en/database/oracle/oracle-database/21/adfns/application-architecture.html
3.事务管理
Oracle 数据库设计为多用户数据库。数据库必须确保多个用户可以同时工作而不会破坏彼此的数据。
3.1.交易
事务是包含一个或多个 SQL 语句的逻辑原子工作单元 。
RDBMS 必须能够对 SQL 语句进行分组,以便它们要么全部提交,这意味着它们被应用到数据库,要么全部回滚,这意味着它们被撤消。
交易需求的一个例子是从储蓄账户到支票账户的资金转移。传输包括以下单独的操作:
减少储蓄账户。
增加支票账户。
在交易日志中记录交易。
Oracle 数据库保证所有三个操作作为一个单元成功或失败。例如,如果硬件故障阻止事务中的语句执行,则必须回滚其他语句。
事务是使 Oracle 数据库有别于文件系统的一项特性。如果您执行更新多个文件的原子操作,并且如果系统中途失败,则文件将不一致。相反,事务将 Oracle 数据库从一种一致状态移动到另一种一致状态。事务的基本原则是“全有或全无”:一个原子操作作为一个整体成功或失败。
更多事务知识请看:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/transactions.html#GUID-B97790CB-DF82-442D-B9D5-50CCE6BF9FBD
3.2.数据并发
多用户 RDBMS 的一个要求是控制数据并发性,即多个用户同时访问相同的数据。
如果没有并发控制,用户可能会不正确地更改数据,从而损害数据完整性。例如,一个用户可以更新一行,而另一个用户同时更新它。
如果多个用户访问相同的数据,那么管理并发的一种方法是让用户等待。但是,DBMS 的目标是减少等待时间,因此它要么不存在,要么可以忽略不计。所有修改数据的 SQL 语句都必须在尽可能少的干扰下进行。必须避免破坏性交互,即错误地更新数据或改变底层数据结构的交互。
Oracle 数据库使用锁来控制对数据的并发访问。锁是一种防止访问共享资源的事务之间的破坏性交互的机制。锁有助于确保数据完整性,同时允许最大程度地并发访问数据。
更多锁信息可以看:《oracle数据库锁定机制概述》
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/data-concurrency-and-consistency.html#GUID-AD0CEE83-2F33-4906-94E1-3D1022924C63
3.3.数据一致性
在 Oracle 数据库中,每个用户都必须看到一致的数据视图,包括用户自己的事务和其他用户提交的事务所做的可见更改。
例如,数据库必须防止脏读问题,当一个事务看到另一个并发事务做出未提交的更改时,就会发生这种问题。
Oracle 数据库始终强制执行语句级读取一致性,这保证了单个查询返回的数据在单个时间点上已提交且一致。根据事务隔离级别,该时间点是语句打开的时间或事务开始的时间。Oracle 闪回查询功能使您能够明确指定此时间点。
数据库还可以为事务中的所有查询提供读取一致性,称为事务级读取一致性。在这种情况下,事务中的每个语句都看到来自同一时间点的数据,即事务开始的时间。
脏读的详细概念请看:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/data-concurrency-and-consistency.html#GUID-E8CBA9C5-58E3-460F-A82A-850E0152E95C




