Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例
【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数
【15】Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate
【16】Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数
【17】Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
【18】Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例
【19】Oracle数据库:oracle多表查询,等值连接,非等值连接,自连接的sql语句和规则
【20】Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)
【21】Oracle数据库:自然连接natural join,using语句,注意避免写交叉连接
【22】Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
【23】Oracle数据库:oracle组函数,聚合函数,多行函数,avg,sum,min,max,count,group by,having
【24】Oracle数据库:oracle嵌套分组函数(聚合函数),组函数的练习题,挺复杂的,用好decode函数,很有趣
【25】Oracle数据库:子查询、单行子查询,多行子查询,in,any,all语句,子查询的练习案例
————前面这些都是数据库查询语言的重要知识,一定要牢牢掌握和熟悉
后面的相对简单一点
【26】Oracle数据库:数据库操纵语言DML,插入insert into where,更新update where,删除delete where
【27】Oracle数据库:oracle事务处理语言TCL,commit,rollback,savepoint语句
【28】Oracle数据库:oracle数据定义语言DDL,查询表、序列、索引、视图、创建表,修改表的列alter,rename to,删除表数据truncate和表drop
【29】Oracle数据库:oracle用命令定义非空not null,unique唯一性,主键primary key,外键foreign key,check检查,启用enable,禁用disable约束
【30】Oracle数据库:创建和删除视图view,简单和复杂视图,内建视图,topN分析,oracle分页查询


文章目录

  • Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字
    • @[TOC](文章目录)
  • oracle序列
  • 创建序列:ddl语句搞
  • 怎么查序列呢?在user_sequences的数据字典表中
  • 怎么用序列呢?nextval,currval
  • 修改序列
  • 删除序列
  • 总结

oracle序列

和表一样
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第1张图片
id列,整数类型的主键
这样可以生成序列来维护主键
数据库包保证它是唯一的

这个主键很难自己去避免重复的,最好数据库自己搞

它自动去维护序列简单多了

我们就可以解脱了,美滋滋

多个表都可以用统一个序列,1,2,3,4,5
仨表中的id就不会是连续的,比如A1,B2,C3,表内是无法连续,但是没关系,我们要的是不重复,无所谓的

创建序列:ddl语句搞

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第2张图片
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第3张图片
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第4张图片
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第5张图片
在这里插入图片描述
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第6张图片

index = next(index)
循环递推下标
好说

缓存优点:性能快,但是数据库关闭之后,缓存就没了哦,又要重新启动的话,对序列造成浪费

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第7张图片
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第8张图片

SQL> create sequence dept_seq increment by 10 start with 120 maxvalue 9999 nocache nocycle;

Sequence created

序列没法查看

SQL> desc dept_seq;
A sequence cannot be described.

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第9张图片
你在序列文件夹下new也可以创建序列
owner是HR
起点120
名字dept_seq2
minvalue
maxvalue
increment by 10
cache size
不写就不管了
默认20哦

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第10张图片
你直接查看view sql命令

-- Create sequence 
create sequence DEPT_SEQ2
minvalue 1
maxvalue 9999
start with 120
increment by 10
nocache;

默认Nocycle

跟咱们手动写命令一个样
很简单的

怎么查序列呢?在user_sequences的数据字典表中

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第11张图片

SQL> select us.SEQUENCE_NAME,us.INCREMENT_BY,us.MAX_VALUE,us.MIN_VALUE,us.CYCLE_FLAG,us.CACHE_SIZE,us.LAST_NUMBER from user_sequences us;

SEQUENCE_NAME                  INCREMENT_BY  MAX_VALUE  MIN_VALUE CYCLE_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ------------ ---------- ---------- ---------- ---------- -----------
DEPARTMENTS_SEQ                          10       9990          1 N                   0         280
DEPT_SEQ                                 10       9999          1 N                   0         120
DEPT_SEQ2                                10       9999          1 N                   0         120
EMPLOYEES_SEQ                             1       1E28          1 N                   0         207
LOCATIONS_SEQ                           100       9900          1 N                   0        3300

为啥起点叫last_number
next_number 呢
因为第一次去1
下一次就是取120呗
就这么来的

怎么用序列呢?nextval,currval

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第12张图片
我们创建搞个案例来玩

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第13张图片
我们起个名字,默认其他的东西
开始为1
新增为1
区间1–无穷

SQL> select test_seq.nextval from dual;

   NEXTVAL
----------
         1

SQL> select test_seq.curval from dual;
select test_seq.curval from dual

ORA-00904: "TEST_SEQ"."CURVAL": 标识符无效

SQL> select test_seq.currval from dual;

   CURRVAL
----------
         1

SQL> select test_seq.currval from dual;

   CURRVAL
----------
         1

nextval就是你当前没用过的有效下一个序列值
currval就是当前最新产生过的序列值

SQL> select test_seq.nextval from dual;

   NEXTVAL
----------
         2

SQL> select test_seq.currval from dual;

   CURRVAL
----------
         2

所以整主键的话,那就是用nextval

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第14张图片

SQL> desc departments;
Name            Type         Nullable Default Comments                                                                                                                                                                                 
--------------- ------------ -------- ------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
DEPARTMENT_ID   NUMBER(4)                     Primary key column of departments table.                                                                                                                                                 
DEPARTMENT_NAME VARCHAR2(30)                  A not null column that shows name of a department. Administration,
Marketing, Purchasing, Human Resources, Shipping, IT, Executive, Public
Relations, Sales, Finance, and Accounting.  
MANAGER_ID      NUMBER(6)    Y                Manager_id of a department. Foreign key to employee_id column of employees table. The manager_id column of the employee table references this column.                                    
LOCATION_ID     NUMBER(4)    Y                Location id where a department is located. Foreign key to location_id column of locations table.                                                                                         

DEPARTMENT_ID 主键
LOCATION_ID 2500中插入一个新部门

SQL> insert into departments(department_id,department_name,location_id) values(test_seq.nextval,'Support',2500);

1 row inserted


SQL> select * from departments d where d.location_id=2500;

DEPARTMENT_ID DEPARTMENT_NAME                MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
            3 Support                                          2500
           80 Sales                                 145        2500

之前nextval是2
现在最新的序列就是3
所以这里的主键为3,变成了唯一的id,不重复哦

序列不像表,它实际上是一个迭代器,可以慢慢返回,哈哈哈哈哈,跟Python那个迭代器类似

所以用dual伪表

修改序列

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第15张图片
跟修改表一个道理
Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第16张图片
HR用户是有alter权限的
在这里插入图片描述

SQL> alter sequence dept_seq increment by 20 maxvalue 999999;

Sequence altered

再查询一波,就知道变了20

SQL> select us.SEQUENCE_NAME,us.INCREMENT_BY,us.MAX_VALUE,us.MIN_VALUE,us.CYCLE_FLAG,us.CACHE_SIZE,us.LAST_NUMBER from user_sequences us;

SEQUENCE_NAME                  INCREMENT_BY  MAX_VALUE  MIN_VALUE CYCLE_FLAG CACHE_SIZE LAST_NUMBER
------------------------------ ------------ ---------- ---------- ---------- ---------- -----------
DEPARTMENTS_SEQ                          10       9990          1 N                   0         280
DEPT_SEQ                                 20     999999          1 N                   0         130
DEPT_SEQ2                                10       9999          1 N                   0         120
EMPLOYEES_SEQ                             1       1E28          1 N                   0         207
LOCATIONS_SEQ                           100       9900          1 N                   0        3300
TEST_SEQ                                  1       1E28          1 N                  20          21

6 rows selected

删除序列

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第17张图片

SQL> drop sequence dept_seq2;

Sequence dropped

Oracle数据库:序列sequence的创建,查询,修改,删除,increment by,start with等关键字_第18张图片
没了


总结

提示:重要经验:

1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

你可能感兴趣的:(oracle,数据库,oracle,序列sequence,increment,by,start,with)