PL/SQL基礎篇9(lock,partition)

/

    鎖:數據庫控制共享資源併發訪問的機制,用於保護正在被修改的數據

        直到提交或回滾了事務之後,其他用戶纔可以更新數據

    分類:行級鎖和表級鎖

*/

-- 行級鎖:行級鎖是一種排他的鎖,防止其他事務修改此行

-- Oracle會自動在下列語句中使用行級鎖

insert

update

delete

select ... for update -- 允許用戶一次鎖定多行記錄進行更新

/*

    表級鎖,使用命令顯式的鎖定表,應用表級鎖的語法

    分類:1.行共享;2.共享;3.排他;4.行排他:5.共享行排他

    共享鎖(SHARE)

       1.鎖定表,僅允許其他用戶查詢表中的行

       2.禁止其他用戶插入、更新和刪除行

       3.多個用戶可以同時在同一個表上應用此鎖

    排他(EXCLUSIVE) – 限制最強的表鎖,僅允許其他用戶查詢該表的行。禁止修改和鎖定表

    死鎖:

      當兩個事務相互等待對方釋放資源時,就會形成死鎖

      Oracle會自動檢測死鎖,並通過結束其中的一個事務來解決死鎖

 

*/

lock table tableName in mode MODE


/*

     分區:Oracle允許用戶將一個表分成多個分區,與表的創建一起

     優點:1.用戶可以執行查詢,只訪問其中特定的分區;

           2.將不同的分區存儲在不同的磁盤,提高訪問性能和安全性

           3.可以獨立備份和恢復分區。

*/

-- 範圍分區,以表中一個列或一組列的值得範圍分區

-- 關鍵字:partition by range values  less than

create table person1(

       pid number primary key,

       birthday date

)

partition by range (birthday)(

      partition p1 values less than (to_date('1980-01-01','yyyy-mm-dd')),

      partition p2 values less than (to_date('1990-01-01','yyyy-mm-dd')),

      --partition p1 values less than (maxvalue)

)

insert into person1 values(1,'ysjian',to_date('1965-02-03','yyyy-mm-dd'));

insert into person1 values(2,'ysjian',to_date('1985-02-03','yyyy-mm-dd'));

insert into person1 values(3,'ysjian',to_date('1995-02-03','yyyy-mm-dd'));

select * from person1 partition(p2);

--散列分區:允許用戶對不具有邏輯範圍的數據進行分區,關鍵字:hash

--          通過在分區鍵上執行hash函數決定存儲的分區,將數據平均分配到不同的分區

create table person2(

       pid number primary key,

       pname varchar2(20),

       birthday date

)

partition by hash(birthday)(

          partition p1,

          partition p2,

          partition p3,

)

--partitions 3;上面四個分區等價這個

-- 列表分區:允許用戶將不相關的數據組織在一起,關鍵字:list,values

create table person3(

       pid number primary key,

       birthday date

       address varchar2(50)

)

partition by list(address)(

       partition hubei values('武漢','黃石','黃岡'),

       partition shanxi values('西安','渭南','寶雞')

)

--複合分區,關鍵字:subpartition

create table person4(

       pid number primary key,

       birthday date

       address varchar2(50)

)

partition by range(birthday)

subpartition by hash(birthday)

subpartitions 4(

      partition p1 values less than (to_date('1980-01-01','yyyy-mm-dd')),

      partition p2 values less than (to_date('1990-01-01','yyyy-mm-dd')),

      partition p3 values less than (to_date('2000-01-01','yyyy-mm-dd'))

)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章