• 10.Oracle的同义词与序列


    一、Oracle同义词:

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

    1、同义词的基本使用

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

      CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;
      
      • 1

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

      示例:

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

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

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

      DROP SYNONYM emp; 
      
      • 1
      DROP PUBLIC SYNONYM emp; 
      
      • 1

    2、同义词的相关权限

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

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

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

      GRANT DROP ANY SYNONYM TO user_name;
      
      • 1

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

    3、同义词的作用范围

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

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

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

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

      CREATE SYNONYM synonym_name FOR schema_name.object_name;
      
      • 1

    二、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];
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      其中,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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      这段代码是用来创建一个名为"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;
      
      • 1
    3. 获取序列的当前值:

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

      在具体表中使用Oracle11g序列的常见方法包括:

      • 在INSERT语句中使用序列:

        INSERT INTO employee (id, name, age)
        VALUES (employee_seq.NEXTVAL, 'John Doe', 30);
        
        • 1
        • 2
      • 在UPDATE语句中使用序列:

        UPDATE employee
        SET id = employee_seq.NEXTVAL
        WHERE name = 'John Doe';
        
        • 1
        • 2
        • 3
      • 在SELECT语句中使用序列:

        SELECT employee_seq.NEXTVAL
        FROM dual;
        
        • 1
        • 2
      • 在表的默认值中使用序列:

        ALTER TABLE employee
        MODIFY (id DEFAULT employee_seq.NEXTVAL);
        
        • 1
        • 2
      • 在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;
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

        上面的代码中,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'));
        
        • 1
        • 2

        上面的代码中,将序列的值插入到表的id列中,将拼接后的字符串插入到my_string列中。每次执行上面的INSERT语句,都会生成一个新的字符串,并将它插入到表中。

        总之,使用序列的CURRVAL和NEXTVAL函数,可以方便地生成一串有规律的数,并将它们插入到表中的某个列中。

    2、序列的相关权限

    在 Oracle 11g 中,序列(Sequence)涉及到的相关权限包括 CREATE SEQUENCE、ALTER、DROP、SELECT 等权限。以下是相关权限的代码示例:

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

      GRANT CREATE SEQUENCE TO user_name;
      
      • 1

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

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

      GRANT ALTER ON sequence_name TO user_name;
      
      • 1

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

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

      GRANT DROP ANY SEQUENCE TO user_name;
      
      • 1

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

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

      GRANT SELECT ON sequence_name TO user_name;
      
      • 1

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

    5. 使用权限:

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

      GRANT INSERT ON table_name TO user_name;
      
      • 1

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

  • 相关阅读:
    【互联网面试】练习题
    【算法竞赛入门练习题】使用 swap() 函数来实现三个数的排序
    stb_image使用说明
    客户案例|用友NC财务系统上云
    大数据技术基础实验十三:Kafka实验——订阅推送示例
    项目管理:制定项目计划应该注意哪些问题?
    C语言实现各类排序算法
    Java基础 --- 注解
    【pytest官方文档】解读- 如何自定义mark标记,并将测试用例的数据传递给fixture函数
    Topaz Video AI for Mac 视频无损放大软件安装教程【保姆级,操作简单轻松上手】
  • 原文地址:https://blog.csdn.net/qq_46645079/article/details/134415688