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
- 修改序列
- 删除序列
- 總結
- @[TOC](文章目錄)
oracle序列
和表一樣
id列,整數類型的主鍵
這樣可以生成序列來維護主鍵
資料庫包保證它是唯一的
這個主鍵很難自己去避免重複的,最好資料庫自己搞
它自動去維護序列簡單多了
我們就可以解脫了,美滋滋
多個表都可以用統一個序列,1,2,3,4,5
仨表中的id就不會是連續的,比如A1,B2,C3,表内是無法連續,但是沒關系,我們要的是不重複,無所謂的
建立序列:ddl語句搞
index = next(index)
循環遞推下标
好說
緩存優點:性能快,但是資料庫關閉之後,緩存就沒了哦,又要重新啟動的話,對序列造成浪費
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.
你在序列檔案夾下new也可以建立序列
owner是HR
起點120
名字dept_seq2
minvalue
maxvalue
increment by 10
cache size
不寫就不管了
預設20哦
你直接檢視view sql指令
-- Create sequence
create sequence DEPT_SEQ2
minvalue 1
maxvalue 9999
start with 120
increment by 10
nocache;
預設Nocycle
跟咱們手動寫指令一個樣
很簡單的
怎麼查序列呢?在user_sequences的資料字典表中
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
我們建立搞個案例來玩
我們起個名字,預設其他的東西
開始為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
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僞表
修改序列
跟修改表一個道理
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
删除序列
SQL> drop sequence dept_seq2;
Sequence dropped
沒了
總結
提示:重要經驗:
1)
2)學好oracle,即使經濟寒冬,整個測開offer絕對不是問題!同時也是你考公網絡警察的必經之路。
3)筆試求AC,可以不考慮空間複雜度,但是面試既要考慮時間複雜度最優,也要考慮空間複雜度最優。