1、Oracle的事務數據庫
1.使用特定格式插入日期值ide
1-使用to_date函數函數
範例2: 插入列帶有日期的表,並按照年_月_日的格式性能
2-將emp表中的部門編號爲10的數據導入到表beyond中 (進行行遷移!)spa
No.1步: 建立表beyond,字段分別是MyId number(4),MyName varchar2(50),MyDept number(5)設計
No.2步: 將表emp中的字段empno,ename,deptno中的記錄批量導入表beyond中!3d
2.使用子查詢更新數據blog
使用update語句更新數據時,既可使用表達式或數據值直接修改數據,也可使用子查詢修改數據.事務
範例: 但願員工scott的崗位、工資、補助與員工SMITH同樣。ip
3.Oracle中事務處理
什麼叫事務?
用於保證數據的一致性,由一組相關的dml語句組成,該組的dml語句要麼所有成功,要麼所有失敗。(dml語句:是指增、刪、改3種語句)
事務和鎖:
當執行事務操做時(dml語句),Oracle會在被做用的表上加鎖,防止其它用戶改表的結構,這對用戶來講是很是重要的。
提交事務:
當執行使用commit語句能夠提交事務,
當執行了commit語句子後,會確認事務的變化、結束事務、刪除保存點、釋放鎖,
當使用commit語句結束事務子後,其它會話將能夠查看到事務變化 後的新數據。
保存點:
是事務中的一點,用於取消部分事務,當結束事務時,會自動的刪除事務所定義的全部保存點。當執行rollback時,經過指定保存點能夠回退到指定的點。
回退事務:
只讀事務:
是指只容許執行查詢的操做,而不容許執行任何其它dml操做的事務,使用只讀事務能夠確保用戶只能取得某時間點的數據。假定機票代售點天天18點開始統計今天的銷售狀況,這時可使用只讀事務。在設置了只讀事務後,儘管其它會話可能會提交新的事務,可是隻讀事務將不會取得最新數據的變化,從而能夠保證取得特定時間點的數據信息。
範例:
範例:當執行了commit語句子後,會確認事務的變化、結束事務、刪除保存點、釋放鎖;
事務的幾個重要操做:
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用戶下,設置只讀事務,此窗口不能關閉,以下圖所示:
No.2步:切換到scott用戶,再插入1條記錄,以下圖所示:
No.3步:切換到system用戶,查詢scott.emp表,應該沒有員工編號爲7935這條記錄!
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