Oracle-序列-存儲過程-視圖-索引-觸發器

  1. 課程介紹
  • 1. 約束(掌握)
  • 2. 序列(掌握)
  • 3. 索引(掌握)
  • 4. 視圖(掌握)
  • 5. 存儲過程(掌握)
  • 6. 自定義函數(掌握)
  • 7. 觸發器(掌握)
  1. 數據庫對象的命名規則

一、對象名稱必須以字母開頭java

二、有效的字符包括數字、字母和三個特殊字符(# _ $)mysql

三、不要使用oracle的保留字做爲對象名稱sql

四、同一用戶下的對象不能同名,即便是不一樣的對象類型數據庫

五、1-30個字符之間緩存

  1. ALTER TABLE  ddl語句

3.1.  增長字段,添加外鍵約束服務器

ALTER TABLE table併發

ADD    (column datatype [DEFAULT expr]oracle

                     [, column datatype]...);函數

 

3.2.  修改字段高併發

 

ALTER TABLE table

MODIFY      (column datatype [DEFAULT expr]

                     [, column datatype]...);

 

3.3.  刪除字段

ALTER TABLE table

DROP  column        (columns);

 

 

  1. 約束

4.1.  主鍵(惟一+非空),惟一,非空,外鍵,check(mysql不支持)

 

一、NOT NULL  非空

二、UNIQUE Key       惟一鍵

三、PRIMARY KEY    主鍵(非空且惟一)

四、FOREIGN KEY     外鍵

五、CHECK                 檢查

4.2.  好處

保存數據以前(jdbc層發出請求,直接在數據庫插入)會驗證數據是否正確

只有保存成功,數據就正確

4.3.  壞處

影響插入\修改的效率

  1. 約束的名稱

5.1.  建立表的時候添加列級約束

 

 

 

 

SYS_C005456 由oracle自動取名

 

5.2.  建立表的時候添加表級約束

 

 

 

5.3.  建立表的時候添加表級外鍵約束

 

5.4.  ALTER TABLE增長約束

 

 

5.5.  軟件公司怎樣使用約束

通常軟件公司在開發階段都添加約束,系統上線刪除約束,從而提供性能

  1. 序列

6.1.  做用

處理主鍵的自動生成

6.2.  Mysql主鍵

自動自增AUTO_INCREMENT,自增的值存儲到表的ddl語句

 

6.3.  建立序列

CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n|]
[minvalue n ];
[cache]

     [NOCYCLE|CYCLE]

     INCREMENT BY: 指定序列號之間的間隔,該值可爲正的或負的整數,但不可爲0。序列爲升序。忽略該子句時,缺省值爲1。

     START WITH:指定生成的第一個序列號。在升序時,序列可從比最小值大的值開始,缺省值爲序列的最小值。對於降序,序列可由比最大值小的值開始,缺省值爲序列的最大值。

     MAXVALUE:指定序列可生成的最大值。

     MINVALUE:指定序列的最小值
          NOCYCLE:一直累加,不循環

     CYCLE:累加到最大值循環

 

6.4.  獲取主鍵的併發

默認序列裏面緩存20個,根據狀況進行適當修改

 

 

cache:默認值是20

      序列裏的緩衝是大量併發提取序列值時提高性能的一種手段

因爲序列操做是原子操做,若是沒有緩衝,序列的訪問將只能由一個事務獨佔,獨佔期間阻塞其它事務的訪問,且必定會涉及硬盤操做。這樣若是有對一個序列的大量併發操做的話,系統性能將會降低。

緩衝是指事先成批的提取序列值,緩衝在內存中,供多個事務同時訪問(每一個事務佔一個緩衝的序列值),且訪問期間若是沒有用盡緩衝是不用寫硬盤的,可在大幅度提升併發訪問序列的性能。但帶來的問題是序列值可能不連續(但確定保證惟一),如併發訪問序列值後有些事務回滾等操做,都會帶來緩衝序列值的不連續或丟失

6.5.  怎樣使用序列

 

 

 

 

insert into employees_test(id,fullname)

values (seq_test.nextval,'xxxxxx0000');

6.6.  建議

通常一個表對應一個序列

6.7.  查看用戶定義的序列
select t.sequence_name,t.min_value,t.max_value,

                   t.increment_by  from user_sequences t

6.8.  修改序列

alter sequence SEQ_TEST

cache 50;

6.9.  刪除序列

DROP SEQUENCE [user.]sequence_name;

  1. 索引

7.1.  做用

方案(schema)中的一個數據庫對象

在數據庫中用來加速對錶的查詢

經過使用快速路徑訪問方法快速定位數據,減小了磁盤的I/O

與表獨立存放,由 Oracle數據庫自動維護

索引相似於一本書的目錄

7.2.  自動建立的索引

若是表建立了主鍵,或者建立惟一約束,自動建立一個惟一索引

 

 

7.3.  哪些值能夠建立索引?

1,外鍵通常要建立索引

2,常用的查詢條件(放到where後面的)要建立索引。

若是使用like ‘%’操做,有些查詢不會使用索引。

like 'a%  'a_'會使用索引

like  '%a'不會使用索引,能夠經過把'a%'         name=abc      name=cba

select * from employees where reverse(name) like reverse('%abc');

like '%a%' 不會使用索引,形成全表掃描,看數據庫表的數量的大小,500萬如下

dba:晚上加班,分庫(讀數據庫,寫數據庫)分表(往年數據變成一張只讀表,今年的數據也是一張表)

3,索引不是越多越好(創建一個索引,使insert速度慢3倍,在加一個在慢2倍)

4,不要在可選值不多的屬性上面建立索引:性別等;

五、對於那些定義爲text, image和bit數據類型的列不該該增長索引

六、當修改性能遠遠大於檢索性能時,不該該建立索引(分庫分表:把往年查詢的數據放到一個只讀的表空間)

7.4.  手動建立索引

在一列或者多列上建立索引.

 CREATE INDEX index

 ON table (column[, column]...);

 

 

 

7.5.  刪除索引

 

  1. 視圖

視圖也就是虛表,實際上視圖就是一個命名的查詢,用於改變基表數據的顯示。

8.1.  做用

能夠限制對數據的訪問

可使複雜的查詢變的簡單

提供了數據的獨立性

提供了對相同數據的不一樣顯示

能夠提供查詢性能,直接運行在數據庫服務器

 

8.2.  建立視圖

 

 

 

 

8.3.  行內視圖

行內視圖是在SQL語句中使用的一個帶有別名的子查詢.

在主查詢FROM 子句中的子查詢就是行內視圖.

行內視圖不是數據庫的對象,因此不須要顯式的建立.

  1. 表空間

就算有建表的權限,也不能建表,由於沒有使用表空間的權限

通常來說,普通用戶都是使用USERS表空間,也能夠本身建立

9.1.  默認有那些表空間

9.2.  邏輯概念

 

9.3.  物理概念

 

9.4.  表空間的做用

1.控制數據庫佔用的磁盤空間;

二、Dba能夠將不一樣類型的數據對象部署到不一樣的位置,這樣有利於提升i/0性能,並有得於備份和恢復管理;

9.5.  建立表空間

表空間包含段,段包含區,區包含塊

Create tablespace ts1 datafile 'd:\xxx.xml' size 20m uniform size 128k

Uniform表示區的大小爲128K。

每一個文件有必定的限制,不要超過500M/1G。

 

 

9.6.  建表的時候,指定放置在表空間

Create table test1(id number(4),name varchar2(50)) tablespace ts1;

 

 

9.7.  授予it擁有ts1的表空間權限

System登陸

ALTER USER "IT" 

    QUOTA UNLIMITED

    ON "TS1"

9.8.  瘋狂複製

 

 

 

 

 

9.9.  擴容表空間

9.9.1.   增長新的數據文件    原文件已經500M/1G

Alter tablespace ts1 add datafile 'd:\data0102.dat' size 20m;

9.9.2.   增長已有的數據文件

Alter database datafile 'd:\xxx.xml' resize 50m;

9.9.3.   自動擴展

ALTER DATABASE

    DATAFILE 'D:\TEST\DATA1.DBF' AUTOEXTEND

ON NEXT  512K MAXSIZE  1024M

9.10.         若是原來存儲的位置,空間不夠

先移動XXX.XML移動到其餘有空間盤

9.10.1.        脫機

Alter tablespace ts1 offline;

 

9.10.2.        剪切到其餘有空間盤

Ctrl+x  Ctrl+v

 

9.10.3.        修改存儲位置

ALTER DATABASE

RENAME FILE 'D:\XXX.XML' TO 'e:\XXX.XML'

9.10.4.        聯機

Alter tablespace ts1 online;

9.10.5.        擴容

ALTER DATABASE

    DATAFILE 'E:\XXX.XML' AUTOEXTEND

ON NEXT  20M MAXSIZE  1024M;

  1. 存儲過程

10.1.         爲何須要存儲過程-提升性能

轉帳業務:在同一個銀行之間進行轉帳

2個帳戶,沒有被凍結,是否有餘額

A.2個帳戶是否存在   2條select語句

B.是否被凍結         就用上面

C.是否有餘額         就用上面

D.轉帳               2條update語句

Jdbc:創建鏈接,實例化語句,發出sql,關閉資源  跑4次

 

把上面的全部業務邏輯,在數據庫裏面至關於封裝到一個方法,存儲過程

步驟A:

在存儲過程發出2條sql,

把sql語句的結果加入一個數據庫的遊標對象CURSOR(相似於java.sql.ResultSet)裏面

若是可以遍歷遊標對象,跳到步驟B

否:返回帳戶不存在

步驟B:

發出2個update請求,進行轉帳

Jdbc:創建鏈接,實例化語句,發出sql,關閉資源  跑1次

 

 

 

10.2.         建立存儲過程語法

 

10.3.         建立一個沒有返回值的存儲過程

 

 

 

 

10.4.         建立一個有返回值的存儲過程

 

有返回值的存儲在命令窗體不能執行

10.5.         Java調用存儲過程

 

 

 

 

 

  1. 自定義函數(必需要有返回值)

11.1.         語法

 

 

 

11.2.         自定義函數裏面不能寫dml語句

函數中不容許DML語句

形參必須爲IN

 

 

11.3.         Java調用函數

 

 

 

 

  1. 觸發器

監控若是發出了insert語句或者update、delete語句,觸發一個事情

12.1.         分類

 

 

12.2.         語句級觸發器

一個dml語句,只觸發一次

 

12.3.         行級觸發器

一個dml語句,能夠觸發屢次

Update 更新,delete 刪除 12行,觸發12次

 

 

 

 

 

12.4.         模式觸發器

 

 

當前用戶受限制:必須先刪除模式觸發器

system管理員不受限制

 

 

  1. 見多識廣800條sql

13.1.         子查詢分類

若是子查詢裏面須要用到主查詢的表進行關聯查詢,就叫相關子查詢

13.1.1.        相關子查詢

子查詢不能單獨執行

 

Select * from table1 a

Where salary >(select avg(salary) from  table b where a.xxid=b.id)

 

13.1.2.        無關子查詢

子查詢能夠單獨執行

Select * from table

Where salary >(select avg(salary) from  table)

 

13.2.         神奇函數

 

 

 

 

13.3.         橫向彙總和縱向彙總

 

  1. 課程總結

14.1.         重點

  1. 約束
  2. 序列
  3. 索引
  4. 視圖
  5. 存儲過程
  6. 觸發器
  7. 自定義函數
相關文章
相關標籤/搜索