oracle基础系统学习目录
01.CentOS7静默安装oracle11g
02.Oracle的启动过程
03.从简单的sql开始
04.Oracle的体系架构
05.Oracle数据库对象
06.Oracle数据备份与恢复
07.用户和权限管理
08.Oracle的表
09.Oracle表的分区
10.Oracle的同义词与序列
11.Oracle的视图
12.Oracle的索引
13.Oracle通过JDBC连接Java
14.Oracle中的事务
15.Oracle11g的归档方式和日志文件的相关操作
16.Oracle的数据字典和动态性能视图
17.Oracle11g的PL/SQL基础
18.Oracle的过程和函数
19.Oracle11g中的游标
20.Oracle11g中的触发器
21.Oracle的程序包(Package)
22.Oracle中的临时表空间
23.Oracle11g的UNDO表空间
24.Oracle11g的逻辑备份与恢复
25. Oracle的回收站
26.Oracle11g的数据装载
27.Oracle11g的闪回Flashback
28.Oracle11g物化视图
oracle11g的同义词与序列
一、Oracle同义词:
同义词是一个数据库对象的别名,它允许用户通过不同的名称来引用同一个表、视图、序列或程序。同义词可以简化SQL语句,提高代码的可读性和可维护性。
1、同义词的基本使用
-
创建同义词的语法如下:
CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;
其中,PUBLIC关键字表示创建公共同义词,可以被其他用户访问;synonym_name是同义词的名称;object_name是同义词所引用的对象名称。
示例:
创建或替换一个同义词,将表employees的名称改为emp:
CREATE OR REPLACE SYNONYM emp FOR employees;
-
查询同义词:
SELECT * FROM emp;
-
删除同义词
DROP SYNONYM emp;
DROP PUBLIC SYNONYM emp;
2、同义词的相关权限
同义词涉及到的相关权限包括 CREATE SYNONYM、DROP SYNONYM 以及对实际对象的权限。以下是相关权限以及不同同义词的作用范围的详细介绍,以及相应的代码示例。
-
CREATE SYNONYM 权限:允许用户创建同义词。
GRANT CREATE SYNONYM TO user_name;
-
DROP SYNONYM 权限:允许用户删除同义词。
GRANT DROP ANY SYNONYM TO user_name;
对实际对象的权限:用户在使用同义词时,实际上是在引用实际对象,因此用户需要有对实际对象的相应权限(比如 SELECT、INSERT、UPDATE、DELETE 等)。
3、同义词的作用范围
同义词的作用范围包括以下几种情况:
-
私有同义词(Private Synonym):创建用户自己的同义词,并且只有创建该同义词的用户可以使用它。
CREATE SYNONYM synonym_name FOR object_name;
-
公有同义词(Public Synonym):创建公有同义词,所有用户都可以使用。
CREATE PUBLIC SYNONYM synonym_name FOR object_name;
-
跨用户的同义词:一个用户可以创建指向其他用户拥有的对象的同义词。
CREATE SYNONYM synonym_name FOR schema_name.object_name;
二、Oracle序列:
1、序列的基本操作
序列是一种数据库对象,它可以生成唯一的数字序列,通常用于为主键列提供唯一值。序列可以在多个表中使用,可以通过NEXTVAL和CURRVAL函数来获取下一个序列值和当前序列值。
-
创建序列的语法如下:
CREATE SEQUENCE sequence_name [INCREMENT BY increment] [START WITH start] [MAXVALUE max_value | NOMAXVALUE] [MINVALUE min_value | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE cache_size | NOCACHE];
其中,sequence_name是序列的名称;increment是序列的增量,默认为1;start是序列的起始值,默认为1;max_value是序列的最大值;min_value是序列的最小值;CYCLE表示序列达到最大值时是否重新从最小值开始循环;CACHE表示在内存中缓存的序列值的数量。
示例:
创建一个序列,名称为emp_seq,起始值为1,每次增加1:
CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 ##可以为-1,当为-1是为递减 MAXVALUE 2000 MINVALUE 1 NOCYCLE CACHE 10; ## 默认为20
这段代码是用来创建一个名为"stu_seq"的序列(Sequence)的。序列是用来生成唯一数字值的对象,通常用于自动生成主键值或者其他需要唯一数字的场景。
具体来说,这段代码设置了序列的起始值为1(START WITH 1),每次递增的步长为1(INCREMENT BY 1),最大值为2000(MAXVALUE 2000),最小值为1(MINVALUE 1),并且不会循环(NOCYCLE),意味着当达到最大值后不会重新从最小值开始。另外,它还设置了缓存为10(CACHE 10),这意味着系统会预先缓存10个序列值,以提高性能。
总的来说,这段代码创建了一个序列,定义了它的起始值、递增步长、最大值、最小值、循环方式以及缓存设置。
-
获取序列的下一个值:
SELECT emp_seq.NEXTVAL FROM dual;
-
获取序列的当前值:
SELECT emp_seq.CURRVAL FROM dual;
-
在表中的使用
在具体表中使用Oracle11g序列的常见方法包括:
-
在INSERT语句中使用序列:
INSERT INTO employee (id, name, age) VALUES (employee_seq.NEXTVAL, 'John Doe', 30);
-
在UPDATE语句中使用序列:
UPDATE employee SET id = employee_seq.NEXTVAL WHERE name = 'John Doe';
-
在SELECT语句中使用序列:
SELECT employee_seq.NEXTVAL FROM dual;
-
在表的默认值中使用序列:
ALTER TABLE employee MODIFY (id DEFAULT employee_seq.NEXTVAL);
-
在Oracle11g中,可以使用序列的CURRVAL和NEXTVAL函数来生成一串有规律的数。下面是一个示例代码,可以将序列的值拼接为一个有规律的字符串:
CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; SELECT 'ABC' || LPAD(my_seq.NEXTVAL, 4, '0') AS my_string FROM dual;
上面的代码中,LPAD函数将序列的值填充为4位,不足4位的用0填充。然后将序列的值拼接到字符串“ABC”后面,生成一个有规律的字符串。每次执行上面的SELECT语句,都会生成一个新的字符串。
如果需要将这个字符串插入到表中的某个列中,可以使用INSERT语句:
INSERT INTO my_table (id, my_string) VALUES (my_seq.NEXTVAL, 'ABC' || LPAD(my_seq.CURRVAL, 4, '0'));
上面的代码中,将序列的值插入到表的id列中,将拼接后的字符串插入到my_string列中。每次执行上面的INSERT语句,都会生成一个新的字符串,并将它插入到表中。
总之,使用序列的CURRVAL和NEXTVAL函数,可以方便地生成一串有规律的数,并将它们插入到表中的某个列中。
-
2、序列的相关权限
在 Oracle 11g 中,序列(Sequence)涉及到的相关权限包括 CREATE SEQUENCE、ALTER、DROP、SELECT 等权限。以下是相关权限的代码示例:
-
授予创建序列的权限:
GRANT CREATE SEQUENCE TO user_name;
这将允许用户 user_name 在数据库中创建新的序列。
-
授予修改序列的权限:
GRANT ALTER ON sequence_name TO user_name;
这将允许用户 user_name 修改特定序列的定义,包括修改起始值、递增步长、最大值、最小值等属性。
-
授予删除序列的权限:
GRANT DROP ANY SEQUENCE TO user_name;
这将允许用户 user_name 删除任何序列。
-
授予查询序列的权限:
GRANT SELECT ON sequence_name TO user_name;
这将允许用户 user_name 查询特定序列的当前值,以及获取序列的下一个值。
-
使用权限:
除了以上列出的权限外,用户还需要有使用序列的权限,以便在 SQL 语句中使用序列来生成唯一的序列值。通常情况下,用户在有相应表的 INSERT 权限时,也可以使用序列。
GRANT INSERT ON table_name TO user_name;
这将允许用户 user_name 向表 table_name 中插入数据,通常在插入数据时可以使用序列来生成唯一的主键值。