按部就班學Oracle之事務和約束

1、Oracle的事務數據庫

1.使用特定格式插入日期值ide

1-使用to_date函數函數

範例2: 插入列帶有日期的表,並按照年_月_日的格式性能

clip_p_w_picpath002

clip_p_w_picpath004

2-將emp表中的部門編號爲10的數據導入到表beyond中 (進行行遷移!)spa

No.1步: 建立表beyond,字段分別是MyId number(4),MyName varchar2(50),MyDept number(5)設計

clip_p_w_picpath006

No.2步: 將表emp中的字段empno,ename,deptno中的記錄批量導入表beyond中!3d

clip_p_w_picpath008

2.使用子查詢更新數據blog

使用update語句更新數據時,既可使用表達式或數據值直接修改數據,也可使用子查詢修改數據.事務

範例: 但願員工scott的崗位、工資、補助與員工SMITH同樣。ip

clip_p_w_picpath010

3.Oracle中事務處理

什麼叫事務?

用於保證數據的一致性,由一組相關的dml語句組成,該組的dml語句要麼所有成功,要麼所有失敗。(dml語句:是指增、刪、改3種語句)

事務和鎖:

當執行事務操做時(dml語句),Oracle會在被做用的表上加鎖,防止其它用戶改表的結構,這對用戶來講是很是重要的。

提交事務:

當執行使用commit語句能夠提交事務,

當執行了commit語句子後,會確認事務的變化、結束事務、刪除保存點、釋放鎖,

當使用commit語句結束事務子後,其它會話將能夠查看到事務變化 後的新數據。

保存點:

是事務中的一點,用於取消部分事務,當結束事務時,會自動的刪除事務所定義的全部保存點。當執行rollback時,經過指定保存點能夠回退到指定的點。

回退事務:

只讀事務:

是指只容許執行查詢的操做,而不容許執行任何其它dml操做的事務,使用只讀事務能夠確保用戶只能取得某時間點的數據。假定機票代售點天天18點開始統計今天的銷售狀況,這時可使用只讀事務。在設置了只讀事務後,儘管其它會話可能會提交新的事務,可是隻讀事務將不會取得最新數據的變化,從而能夠保證取得特定時間點的數據信息。

範例:

clip_p_w_picpath012

clip_p_w_picpath014

clip_p_w_picpath016

範例:當執行了commit語句子後,會確認事務的變化、結束事務、刪除保存點、釋放鎖;

clip_p_w_picpath018

事務的幾個重要操做:

1)設置保存點 SQL> savepoint a1;

2)取消部分事務 SQL> rollback to a1;

3)取消所有事務 SQL> rollback;

只讀事務:

是指只容許執行查詢的操做,而不容許執行任何其它dml操做的事務,使用只讀事務能夠確保用戶只能取得某時間點的數據。假定機票代售點天天18點開始統計今天的銷售狀況,這時可使用只讀事務。在設置了只讀事務後,儘管其它會話可能會提交新的事務,可是隻讀事務將不會取得最新數據的變化,從而能夠保證取得特定時間點的數據信息。

範例:

No.1步: 設置只讀事務且此窗口不能關閉,(用戶system);

No.2步: 其它用戶的操做都不生效了!(如:scott用戶插入數據);

No.3步: 在No.1步的窗口再次查詢是否有剛纔插入的數據(沒有!).

PS:

設置只讀事務: SQL> set transaction read only;

設置讀寫事務: SQL> set transaction read write;

No.1步:注意:切換到系統管理員system用戶下,設置只讀事務此窗口不能關閉,以下圖所示:

clip_p_w_picpath020

No.2步:切換到scott用戶,再插入1條記錄,以下圖所示:

clip_p_w_picpath022

clip_p_w_picpath024

No.3步:切換到system用戶,查詢scott.emp表,應該沒有員工編號爲7935這條記錄!

clip_p_w_picpath026


2、約束:

重點:

在Oracle數據庫中,數據完整性可使用三種方法來實現:

(1)約束: 優勢是易維護,而且具備最好的性能,故做爲維護數據完整性的首選!

(2)觸發器:

(3)應用程序(過程、函數):

1-約束:

約束用於確保數據庫數據知足特定的商業規則,在Oracle中,約束包括:

(1) not null:

若在列上 定義了not null,那麼當插入數據時,必須爲列提供數據;

(2) unique:

若定義了惟一約束後,該列值不能重複的,可是能夠爲null(空);

(3) primary key:

用於惟一的標示行表示行的數據,當定義主鍵約束後,該列不但不能重複,並且不能爲null 。

注:一張表最多隻能有一個主鍵,可是能夠有多個unqiue約束;

(4) foreign key:

用於定義主表和從表之間的關係。外鍵約束要定義在從表上,主表則必須具備主鍵約束或是unique約束,當定義外鍵約束後,要求外鍵列數據必須在主表的主鍵列存在或是爲null ;

(5) check.

用於強制行數據必須知足的條件,假定在sal列上定義了check約束,並要求sal列值在100~200之間,若是不在100~200之間,則會提示出錯。

範例:商店售貨系統表設計案例:

No.1張表商品goods

SQL> create table goods

2 (

3 goodId char(8) primary key, --主鍵

4 goodName varchar2(30),

5 unitPrice number(10,2) check(unitprice>0),

6 category varchar2(8),

7 provider varchar2(30)

8 );

Table created

PS:如何修改字段名?

SQL> alter table goods rename column goodId to goodsId;

No.2張表客戶customer

SQL> create table customer

2 (

3 customerId char(8) primary key, --主鍵

4 name varchar2(50) not null, --不爲空

5 address varchar2(50),

6 email varchar2(50) unique,

7 sex char(3) default '男' check (sex in ('男','女')), --理論講此處應爲2個字符

8 cardId char(18)

9 );

Table created

No.3張表購買purchase

SQL> create table purchase

2 (

3 customerId char(8) references customer(customerId), --外鍵,表組定義!列級定義foreign key

4 goodsId char(8) references goods(goodsId), --外鍵,表組定義!列級定義

5 nums number(10) check(nums between 1 and 30)

6 )

7 ;

Table created

範例:增長商品名也不能爲空

SQL> alter table goods modify goodname not null;

Table altered

範例:×××也不能重複

SQL> alter table customer add constraint cardunique unique(cardid);

表已更改。 --constraint 約束;約束名爲:cardunique

範例:如何刪除約束

--刪除約束

SQL> alter table customer drop constraint cardunique;

Table altered

範例:增長客戶的住址只能是」海淀」、」朝陽」、」東城」、」西城」、」通州」、」崇文」。

SQL> alter table customer add constraint addresscheck

2 check (address in ('海淀','朝陽','東城','西城','通州','崇文'));

Table altered

範例:如何刪除check(檢測)

SQL> alter table customer drop constraint addresscheck;

Table altered

相關文章
相關標籤/搜索