1. 程式人生 > >Oracle對象下集(序列、同義詞、分區表、database link)

Oracle對象下集(序列、同義詞、分區表、database link)

databse link Oracle同義詞 Oracle序列 Oracle分區表 張晨

本人所有博文純手碼,給個關註或者贊吧!博主:張晨晨QQ:1445696451歡迎隨時加Q討論技術。
一、Oracle的序列
·序列是用來生成惟一的連續的整數的數據庫對象。序列通常可以用來自動生成主鍵或者唯一鍵的值;可根據數值進行升序或者降序的排列
·比如創建班級的學生信息登記表,可以將學號使用序列自動生成。班級的學號都是10000~10060這個範圍,每登記一個學生,序列自動增長一個。
1、創建序列的命令語法
create sequence seq_name [start with interger] [increment by interger] [maxvalue interger ] [minvalue interger] [cycle|nocycle] [cache interger|nocache];

註釋:
create sequence seq_name :創建序列
start with :從...開始生成序列
increment by :每次增長的數值
maxvalue :最大的序列值,默認不限制最大值
minvalue :最小的序列值,默認不限制最小值
cycle :翻譯為中文是圓的意思,這裏其實是指循環,當序列到達最大值/最小值時,從初始值開始繼續生成。默認為nocycle,不進行循環生成。
cache :預先分配出來的序列,保存於緩存中,可用於快速訪問序列號。默認為nocache,即不分配緩存
舉例:
create sequence seq_1
start with 10000
increment by 1
maxvalue 10060
nocycle;

:還是上面的例子,創建一個seq_1序列,從10000開始,每次增長為1,最大值為10060,不進行循環生成。
2、我們建立好了序列自然需要將序列應用到我們創建的表(table)中。可以通過nextval、currval偽列來訪問該序列的值。
·nextval:這個偽列會在創建序列後第一次使用時,返回該序列的初始值。在以後使用時,將使用increment by子句的值來增加序列值
·currval:會返回序列的最後一次引用nextval時返回的值。
舉例:
create table student_class25(stu_id number not null,stu_name varchar2(20),
stu_age number);

創建一個student_class25表
insert into student_class25 values (seq_1.nextval,’zhangsan’,’13’);
insert into student_class25 values (seq_1.nextval,’lisi’,’13’);
...

向student_class25表中插入數據,在對應stu_id這一列我們引用序列seq_1。
select seq_1.currval from dual;
查詢序列當前值
##如果在你指定緩存的環境下,執行startup force重啟數據庫,接著寫的數據的序列號會從初始值+緩存值開始。例如,初始值為10,緩存值為30個,那麽執行startup force後,序列號會從40開始生成。
3、維護序列
1)查看序列(使用字典user_sequences)
select from user_sequences;
2)刪除序列
drop sequence seq_name;
3)更改序列
alter sequence seq_name [...];
二、Oracle的同義詞
·顧名思義,同義詞就是意思相同的詞語,你可以看做是對象的一個別名,就像liunx操作系統中的命令的別名一樣。但是linux命令別名只提供了方便容易記憶的好處。
1、而在Oracle中,同義詞可用來:
1)簡化Oracle中輸入的SQL語句,通過給對象建立同義詞,我們可以簡化復雜的SQL語句,方便記憶和操作
2)隱藏對象的名稱和所有者,給對象建立了同義詞,如scott模式下的emp表(scott,emp),我們建立一個同義詞就叫做se。那麽我們在查詢這個表的時候就不用擔心暴露表的位置,提供了一定的安全性
3)提供對數據庫的公共訪問,可以通過給遠程連接建立公有同義詞給其他的用戶查看。
4)以及為分布式數據庫的遠程對象提供位置透明性,我們給數據庫鏈接(將其看做是一個對象)建立同義詞,使用戶可以無阻礙的查看數據表,這時候對於用戶而言,位置就是透明的。
2、同義詞分類(兩種)
1)私有同義詞:為當前模式的用戶私有,其他用戶無法使用
2)公有同義詞:與私有同義詞相反
3、創建同義詞
create [or replace] [public] synonym sy_name for object_name;
註釋:
create ... for :給...創鍵同義詞
[or replace] :該可選項的作用是覆蓋(如果存在同名的同義詞就會將其覆蓋掉)
[public] :加上該選項表示創建公有同義詞
sy_name :同義詞名
object_name :對象名稱,如scott.emp(即scott用戶下的emp表)
4、舉例
create synonym sy_name for scott.emp;
為scott.emp表創建私有同義詞
create public synonym sy_name for scott.emp;
創建公有同義詞
##創建好的公有同義詞不代表用戶就可以使用,我們還需要對需要操作這個表的用戶進行授權
5、復雜應用
1)建立oracle連接的命令
舉例:
①conn system/pwd123@neworcl;
②create database link link_1 connect system identified by pwd123 using orcl;
③create synonym sy_t for scott.emp@link_1;
通過以上命令建立一條連接到遠程數據庫的數據庫鏈接,並為鏈接中數據庫的scott.emp表建立同義詞。
6、維護同義詞
1)查看同義詞
select
from user_synonyms;

2)刪除公有/私有同義詞
drop [public] synonym sy_name;
三、數據庫鏈接
1、數據庫鏈接是定義一個數據庫到另一個數據庫路徑的對象,可以通過數據庫鏈接查詢遠程表、執行遠程程序。在分布式環境中,Oracle數據庫鏈接是必須的。有一點,oracle數據庫鏈接是單向的;一個鏈接,能從a數據庫鏈接到b數據庫,那麽無法從b數據庫鏈接到a數據庫。
2、數據庫鏈接分類
private:屬於創建該鏈接的用戶,也只有該用戶可以使用
public:屬於public,允許本地數據庫中所有擁有數據庫訪問權限的用戶使用
global:全集類型,網絡中的數據庫用戶均可使用
3、創建數據庫鏈接
create database link connect to username identified by user
passwd using
‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ipaddress)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dbtest)
)
)’;

四、分區表
·Oracle可將表的行分成多個部分(存儲於不同的表空間),這些部分組成的表就是分區表,這些部分被稱為Oracle分區。而分區表的應用一般來說,表的大小要足夠大才可以體現分區表的作用,太小的表不建議使用。
1、分區表有很大的作用:
1)改善標的查詢性能;同時實現分開管理
2)便於備份和恢復,如果一部分的數據丟失,只需要單獨恢復對應分區即可
3)分開存儲數據,提高安全性
4)分區對於用戶而言也是透明的
2、創建分區表
create table t_name
(stu_id number,stu_name varchar2(20),stu_age number)
partition by range (stu_id)
(
partition p1 values less than (),
partition p2 values less than (),
parti...
);

Oracle對象下集(序列、同義詞、分區表、database link)