10.Oracle的同义词与序列

oracle11g的同义词与序列

  • 一、Oracle同义词:
    • 1、同义词的基本使用
    • 2、同义词的相关权限
    • 3、同义词的作用范围
  • 二、Oracle序列:
    • 1、序列的基本操作
    • 2、序列的相关权限

一、Oracle同义词:

同义词是一个数据库对象的别名,它允许用户通过不同的名称来引用同一个表、视图、序列或程序。同义词可以简化SQL语句,提高代码的可读性和可维护性。

1、同义词的基本使用

  1. 创建同义词的语法如下:

    CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;
    

    其中,PUBLIC关键字表示创建公共同义词,可以被其他用户访问;synonym_name是同义词的名称;object_name是同义词所引用的对象名称。

    示例:

    创建或替换一个同义词,将表employees的名称改为emp:

    CREATE OR REPLACE SYNONYM emp FOR employees;
    
  2. 查询同义词:

    SELECT * FROM emp;
    
  3. 删除同义词

    DROP SYNONYM emp; 
    
    DROP PUBLIC SYNONYM emp; 
    

2、同义词的相关权限

同义词涉及到的相关权限包括 CREATE SYNONYM、DROP SYNONYM 以及对实际对象的权限。以下是相关权限以及不同同义词的作用范围的详细介绍,以及相应的代码示例。

  1. CREATE SYNONYM 权限:允许用户创建同义词。

    GRANT CREATE SYNONYM TO user_name;
    
  2. DROP SYNONYM 权限:允许用户删除同义词。

    GRANT DROP ANY SYNONYM TO user_name;
    

对实际对象的权限:用户在使用同义词时,实际上是在引用实际对象,因此用户需要有对实际对象的相应权限(比如 SELECT、INSERT、UPDATE、DELETE 等)。

3、同义词的作用范围

同义词的作用范围包括以下几种情况:

  1. 私有同义词(Private Synonym):创建用户自己的同义词,并且只有创建该同义词的用户可以使用它。

    CREATE SYNONYM synonym_name FOR object_name;
    
  2. 公有同义词(Public Synonym):创建公有同义词,所有用户都可以使用。

    CREATE PUBLIC SYNONYM synonym_name FOR object_name;
    
  3. 跨用户的同义词:一个用户可以创建指向其他用户拥有的对象的同义词。

    CREATE SYNONYM synonym_name FOR schema_name.object_name;
    

二、Oracle序列:

1、序列的基本操作

序列是一种数据库对象,它可以生成唯一的数字序列,通常用于为主键列提供唯一值。序列可以在多个表中使用,可以通过NEXTVAL和CURRVAL函数来获取下一个序列值和当前序列值。

  1. 创建序列的语法如下:

    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个序列值,以提高性能。

    总的来说,这段代码创建了一个序列,定义了它的起始值、递增步长、最大值、最小值、循环方式以及缓存设置。

  2. 获取序列的下一个值:

    SELECT emp_seq.NEXTVAL FROM dual;
    
  3. 获取序列的当前值:

    SELECT emp_seq.CURRVAL FROM dual;
    
  4. 在表中的使用

    在具体表中使用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 等权限。以下是相关权限的代码示例:

  1. 授予创建序列的权限:

    GRANT CREATE SEQUENCE TO user_name;
    

    这将允许用户 user_name 在数据库中创建新的序列。

  2. 授予修改序列的权限:

    GRANT ALTER ON sequence_name TO user_name;
    

    这将允许用户 user_name 修改特定序列的定义,包括修改起始值、递增步长、最大值、最小值等属性。

  3. 授予删除序列的权限:

    GRANT DROP ANY SEQUENCE TO user_name;
    

    这将允许用户 user_name 删除任何序列。

  4. 授予查询序列的权限:

    GRANT SELECT ON sequence_name TO user_name;
    

    这将允许用户 user_name 查询特定序列的当前值,以及获取序列的下一个值。

  5. 使用权限:

    除了以上列出的权限外,用户还需要有使用序列的权限,以便在 SQL 语句中使用序列来生成唯一的序列值。通常情况下,用户在有相应表的 INSERT 权限时,也可以使用序列。

    GRANT INSERT ON table_name TO user_name;
    

    这将允许用户 user_name 向表 table_name 中插入数据,通常在插入数据时可以使用序列来生成唯一的主键值。

你可能感兴趣的:(oracle学习,oracle,数据库)