0%

定义

  • 逐行处理查询结果,以编程的方式访问数据

游标分类

隐式游标:在PL/SQL中执行DML SQL语句时自动创建隐式游标

  • 隐式游标自动生命、打开和关闭,名字为SQL
  • 隐式游标的属性:
    • %FOUND:SQL语句影响一行或多行时为TRUE
    • %NOTFOUND:SQL语句没有影响任何行时为TRUE
    • %ROWCOUNT:语句影响的行数
    • %ISOPEN:是否打开状态,始终为FALSE
1
2
3
4
BEGIN
UPDATE student SET sage = sage + 10;
dbms_output.put_line('更新了' || SQL%rowcount || '行');
END

显式游标:现式游标用于处理返回多行的查询

1
2
3
4
5
6
7
8
9
10
11
12
DECLARE
my_toy_price toys.toyprice%TYPE;
CURSOR toy_cur IS SELECT toyprice FROM toys WHERE toyprice<250;--声明游标
BEGIN
OPEN toy_cur;--打开游标
LOOP
FETCH toy_cur INTO my_toy_price;--提取行
EXIT WHEN toy_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('玩具单价'||my_toy_price);
END LOOP;
CLOSE toy_cur;--关闭游标
END;
阅读全文 »

定义

  • ORacle数据库有联机重做日志,这个日志是记录数据库所做的修改,包括对表作的数据改变,对系统做的改变等,可以使用它来维护数据的完整性,以及对数据库的恢复,日志挖掘
  • 日志文件分为在线日志文件和归档日志文件。归档日志是在线日志的历史备份
  • LGWR 把日志缓冲区的重做条目写到联机日志文件中,redo01.log,redo02.log,redo03.log…
  • 数据库启动的时候,有前滚,回滚,只要用户有commit的记录,都不会丢失,只要是用户没有commit的记录,都不会保存
  • 日志按照组来组织,每个组里面有多个文件。日志按照循环的方式来工作。所以在oracle里面至少有两个日志组,当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志2写满的时候,又会发生日志切换,去写日志组1,反复进行
  • 如果数据库处于非归档模式,联机日志在切换时就会丢弃,而在归档模式下,日志切换的时候,切换的日志会进行归档。比如,当重做日志1写满的时候,发生日志切换,开始写日志2,这时联机重做日志1的内容会拷贝到另外一个指定的目录下。这个目录叫归档目录,拷贝的文件叫归档重做日志。
  • 数据库使用归档方式运行时才可以进行灾难性恢复
阅读全文 »

定义

  • 数据字典是数据的数据,记录列最基本的信息
  • 包括数据字典基表表和数据字段视图
  • 数据字典基表表由$ORACLE_HOME\RDBMS\ADMIN\sql.bsq创建,数据字典基本表大多以$结尾,属于sys用户,存放在system表空间。用户不能手动去修改数据字典基本表。
  • 为了简化数据字典基本表的使用,oracle提供了数据字典视图,oracle还为数据字典视图创建了公有同义词,方便用户使用。(catalog.sql)

分类

  • USER_:表示当时登陆用户拥有的信息
  • ALL_:表示当时登陆用户有权限看到的信息
  • DBA_:表示数据库管理员能够看到的信息,也就是整个数据库范围内的信息
阅读全文 »

定义

  • 昨作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体向系统提交,要么都执行,要么都不执行。事务是不可分隔的工作逻辑单元。
  • 是我必须具备以下四个属性,ACID
    • 原子性(Atomicity):事务是个完整的操作。事务的各步操作是不可分的。要么执行,要么都不执行。
    • 一致性(Consistency):当事务完成时,数据必须处于一致状态。
    • 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,事务必须是独立的。它不以任何方式依赖或者影响其他事务
    • 永久性(durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。

一致读 consistent read

  • 如果一个用户在A1时间发出查询,用户在之后的A2时间修改数据,oracle返回的数据一定是修改前的数据
  • commit rollback savepoint
阅读全文 »

定义

  • 索引是以表相关的一个可选结构
  • 用以提高SQL语句执行的性能
  • 减少磁盘IO
  • 使用CREATE INDEX 语句创建索引
  • 在逻辑和物理上都独立于表数据
  • Oracle自动维护索引

分类

  • 创建标准索引
1
CREATE INDEX index1 on table_name(column1);
  • 查看索引
1
select * from user_indexes;
  • 查看索引信息
1
select * from user_ind_columns;
  • 分析索引:查看index_stats表中的pct_used列的值,如果pct_used的值过低,说明索引存在碎片,可以重建索引,提高pct_used值,减少碎片
1
analyze index <index_name> validate structure;
阅读全文 »

定义

  • 经过定制的方式显示来自一个或多个表的数据
  • 视图可以视为“虚拟表”或“存储空间”
  • 视图可以使用单行函数、分组函数和表达式,但必须指定名字

优点

  • 提供另一种级别的安全性
  • 隐藏的数据复杂性
  • 简化用户的SQL命令
  • 隔离基表结构的改变
  • 通过重命名列,从另一个角度提供数据
阅读全文 »

定义

  • 用于生产唯一、连续序号的对象
  • 可以升序,可以降序
  • CREATE SEQUENCE 创建序列
1
2
3
4
5
6
7
CREATE SEQUENCE s1
START WITH 1
INCREMENT BY 1
MAXVALUE 2000
MINVALUE 1
NOCYCLE -- 达到最大值后停止生成下一个值
CACHE 10; --指定内存中预先生成的序列数
阅读全文 »

定义

  • 同义词是先有对象的一个别名
    • 简化SQL语句
    • 隐藏对象名称的所有者
    • 提供对对象的所有访问

私有同义词

  • 只能在其模式内访问,且不能与当前模式的对象重名
  • 需要create synonym权限
1
grant create synonym to scott;
1
create synonym for s1 for scott.emp;
阅读全文 »

表分区的概念

  • 允许用户将一个表分成多个区
  • 用户可以只查询特定分区
  • 将不同分区存储在不同的磁盘,提高访问性能和安全性
  • 可以独立地备份和恢复每个分区

分区方法

  • 可以使用user_tab_partitions查看分区信息

范围分区

  • 以表中的一个列或一组列的值的范围分区
1
2
3
4
5
6
7
PARTITION BY RANGE(column_name)
(
PARTITION p1 VALUES LESS THAN(range1),
PARTITION p1 VALUES LESS THAN(range1),
...
[PARTITION p1 VALUES LESS THAN(MAXVALUE)]
);
阅读全文 »

锁的概念

  • 锁是数据库用来控制共享资源并发访问的机制
  • 锁是用于保护正在修改的数据
  • 提交或者回滚事务之后,其他用户才可以更新数据

锁的优点

  • 一致性:一次只允许一个用户修改数据

  • 完整性:为所有用户提供正确的数据,如果一个用户进行了修改并保存,所做的修改反映给所有用户

  • 并行性:允许多个用户访问同一数据

阅读全文 »