1. 程式人生 > >java:Oracle(視圖,索引,序列)

java:Oracle(視圖,索引,序列)

font mode 哪裏 name 兩個 _id 轉換 seq java

1.索引:索引一共分為4種

  -- 在oracle中,
  -- normal:普通索引
  -- unique:唯一索引
  -- bitmap:位圖索引
  -- B 樹索引:默認:如果不建立索引的情況下,oracle就自動給每一列都加一個B 樹索引

  -- index(下標,索引):作為索引,在oracle如果自帶索引能滿足當前查詢需求,就只需要建立索引,oracle自帶機制會幫你使用
  -- 如果當前查詢oracle自帶的索引滿足不了,就要自己編寫索引 (不學)
  -- 索引就可以直接理解為一個目錄

  -- 二叉樹:可以有多層,但是每一層最多有兩個節點
  -- 但是B 樹:也可以有層,不過每一層可以有多個節點


  

  -- 什麽情況下,才會啟用索引查找呢?
  -- 只要有where(條件查詢)存在,就一定會啟動索引
  -- 所有的索引分類,不是屬於(適用於)一張表,而是適用於某一列的

  

  -- normal:普通索引
  -- 就相當於一個普通的字段
  -- normal,unique索引的運行機制:他會給綁定的列都加一個下標,一旦在where使用建立了索引的列,就會自動啟動索引,先把     description找出來,把所有下標列出來,通過下標進行比較,如果找到了就返回該條數據,如果找不到就返回null
  select * from classes where description = ‘Java基礎‘;

 

  -- unique:唯一索引
  -- 索引綁定的列的數據不能有任何一條重復,但是可以為null,唯一索引主要用於主鍵id ,地區表,國家表,市區表,身份證號
  -- 當一個表的主鍵和唯一鍵被建立的時候,自動建立了一個唯一索引

 

  -- B 樹索引:和二叉樹一樣,但是二叉樹只能有兩個節點,但是B 樹可以有多個節點

  

  -- bitmap:位圖索引
  -- 怎麽實現?
  -- 以性別為例:把男的標記1,把女的標記為0,在查找的時候,會把性別轉換為數字,(比如查詢出所有為男性用戶信息),和1,0進行 對比,如果是1全部找出來,如果是0 全部排除


-- 位圖索引適用的場景:有大量的重復數據,並且數據選擇性很少(性別,婚否,是否成年。。。)

  

2.視圖:

  -- view(視圖):虛擬的表(需要真實的表提供數據)
    -- 可視化圖像
    -- 在oracle視圖是虛擬不存在的,不會存儲在硬盤上
    -- 視圖的機制:通過真正的表映射出來的數據存儲在視圖中,映射的整個過程在內存中進行,所以查詢視圖比查詢真實的表速度快
    -- 視圖的好處:第一查詢速度快,第二不占用任何硬盤空間,第三可以很好的對需要保密的數據進行處理

 

  -- 視圖就是為了解決:
    -- 第一:信息安全問題
    -- 第二:查詢效率問題
    -- 第三:方便查詢

 

  -- 怎麽建立一個視圖?
  -- 找views文件夾,點擊新建-->name:視圖的名字,item list:列名,table list:以表為基礎所建立視圖的表名,where clause :限制條件 
  -- 視圖的建立:
  -- 如果需要更換視圖數據,但是不需要更換視圖名稱的時候 or replace
  -- 無論是定時器,PL/SQL,視圖,存儲過程 create or replace
  create view test_views as (select * from classes);
  create or replace view test_views as (select * from classes);
  -- where clause:限制條件
  create view test_views2 as (select * from teacher) with read only;
  select * from test_views;
  select * from teacher;


  -- !=,==,<=,>=,<,>:對應的英文:
  create or replace view lt_one_thround_five_hundrand as(select tor.total_price prices, tut.type_name, tur.username from t_order tor
  inner join t_user tur on tur.id = tor.user_id
  inner join t_user_type tut on tut.id = tur.user_type_id where tor.total_price > 1500);

  select * from lt_one_thround_five_hundrand;

3.序列:sequence

  概念:

  有序的隊列(等差數列,等比數列..):第一有一定順序,第二是形成一種隊列
  所謂oracle的序列,最常用到的就是自增主鍵

  在pl/sql中,有一個文件夾,就叫做sequences,在這個文件夾下存的東西就叫序列

  

  怎麽建立一個序列:
    名稱:序列的名字(可以任意命名)
    開始於:此序列從哪裏開始
    增量:每次增加的數
    最小值:自己定義的最小的數字,(以主鍵id為例)來限制id的範圍
    同理最大值是和最小值一樣的
    建立一個序列的時候,如果沒有特殊的要求,只需要起一個名字即可,其他的值都有默認值
    在使用默認值的時候,開始於這一欄的值就會從0開始(當前值)

  

  在查詢序列時,有兩個屬性:nextval,currval
  -- nextval: next value下一個值
  -- currval: current value 當前的值
  使用select 序列名.屬性名 from dual;進行查詢一個序列的值
  

  oracle規定,第一次查詢序列的時候,一定要使用nextval,因為序列也是需要初始化
  在序列中,遞增的數字,由增量來控制。

  序列:最主要用到的場景,就是oracle中主鍵的自增
  如果使用自增id這個場景的時候,序列只需要起一個名字即可,不需要修改任何屬性值

  

4.Other:

  算法首先要學習數據結構
    算法分析:sin cos tan cotan 矩陣 拉格朗日 樸素貝葉斯 遺傳算法
    算法導論

  -- package:就是Java中的包
  -- 就相當於你把文件進行歸類的文件夾
  -- Java中包下面放的可以是Class,Interface,package,xml...
  -- 在真實開發環境中:Cars.class-->entity(實體),操作數據庫的class-->dao,業務邏輯層--->service,查詢出的數據是需要傳到頁面進 行展示--->controller,工具類--->util,過濾器(filter)--->filter,interceptor(攔截器)--->interceptor
  -- model view controller--->MVC
  insert into teacher(id, name, age, description, hire_date) values(s_teacher_id.nextval,‘hehehe‘, 17, ‘測試數據‘, sysdate);

java:Oracle(視圖,索引,序列)