隨筆 - 14, 文章 - 39, 評論 - 17, 引用 - 0
          數(shù)據(jù)加載中……

          [轉(zhuǎn)]Oracle簡單示例講解

          預(yù)定義角色:

          1.CONNECT角色:????授于最終用戶的典型最基本的權(quán)利
          ALTER SESSION --修改會(huì)話
          CREATE CLUSTER --建立聚簇
          CREATE DATABASE LINK --建立數(shù)據(jù)庫鏈接
          CREATE SEQUENCE --建立序列
          CREATE SESSION --建立會(huì)話
          CREATE SYNONYM --建立同義詞
          CREATE VIEW --建立視圖

          2.RESOURCE角色:????是授予開發(fā)人員的
          CREATE CLUSTER --建立聚簇
          CREATE PROCEDURE --建立過程
          CREATE SEQUENCE --建立序列
          CREATE TABLE --建表
          CREATE TRIGGER --建立觸發(fā)器
          CREATE TYPE --建立類型

          3.DBA角色:擁有系統(tǒng)所有系統(tǒng)級權(quán)限


          4.IMP_FULL_DATABASE角色、EXP_FULL_DATABASE角色:
          BACKUP ANY TABLE --備份任何表
          EXECUTE ANY PROCEDURE --執(zhí)行任何操作
          SELECT ANY TABLE --查詢?nèi)魏伪?br />
          5.DELETE_CATALOG_ROLE角色:
          授予用戶這個(gè)角色,用戶就可以從表sys.aud$中刪除記錄,
          sys.aud$表中記錄著審計(jì)后的記錄,使用這個(gè)角色可以簡化審計(jì)蹤跡管理。


          6.SELECT_CATALOG_ROLE角色、EXECUTE_CATALOG_ROLE角色:
          SELECT_CATALOG_ROLE角色具有從數(shù)據(jù)字典查詢的權(quán)利,
          EXECUTE_CATALOG_ROLE角色具有從數(shù)據(jù)字典中執(zhí)行部分過程和函數(shù)的權(quán)利。

          SQL*PLUS基礎(chǔ)
          在上一貼中,我們掌握了些基本的oracle操作,如創(chuàng)建、授權(quán)用戶,創(chuàng)建數(shù)據(jù)庫等。在OEM(Oracle Enterprise Manager)可視化的窗口環(huán)境中,雖然我們也可以很方便地做這些事,但是事實(shí)上,用SQL語言書寫在開發(fā)上更有效率!!oracle提供的SQL*Plus就是個(gè)不錯(cuò)的工具,如果大家喜歡窗口的開發(fā)環(huán)境,用SQLPlus Worksheet也行!下面說點(diǎn)基本的西西!

          SQL(Structure Query Language)語言是結(jié)構(gòu)化查詢語言,是數(shù)據(jù)庫的核心語言,是面向集合的描述性非過程化語言。
          SQL語言共分為四大類:數(shù)據(jù)查詢語言DQL,數(shù)據(jù)操縱語言DML,數(shù)據(jù)定義語言DDL,數(shù)據(jù)庫控制語言DCL。

          1.數(shù)據(jù)查詢語言DQL的基本結(jié)構(gòu)是由select子句,from子句,where子句組成的查詢塊:
          select <字段名表> from <表或視圖名> where <查詢條件>

          2.數(shù)據(jù)操縱語言DML完成在數(shù)據(jù)庫中確定、修改、添加、刪除某一數(shù)據(jù)值的任務(wù)(以下是部分常用DML語句):
          insert????增加數(shù)據(jù)行到表
          delete????從表中刪除數(shù)據(jù)行
          Update????更改表中數(shù)據(jù)

          3.數(shù)據(jù)定義語言DDL完成定義數(shù)據(jù)庫的結(jié)構(gòu),包括數(shù)據(jù)庫本身、數(shù)據(jù)表、目錄、視圖等數(shù)據(jù)庫元素(以下是部分常用DDL語句)
          create table????創(chuàng)建表
          create index????創(chuàng)建索引
          create view????創(chuàng)建視圖
          alter table????增加表列,重定義表列,更改存儲分配
          drop table????刪除表
          drop index????刪除索引

          4.數(shù)據(jù)庫控制語言DCL用來授予或回收訪問數(shù)據(jù)庫的某種特權(quán),并控制數(shù)據(jù)庫操縱事務(wù)發(fā)生的時(shí)間及效果,對數(shù)據(jù)庫實(shí)行監(jiān)視等。如:
          grant????????將權(quán)限或角色授予用戶或其它角色
          revoke????????回收用戶權(quán)限
          roll????????回滾,是當(dāng)某個(gè)對話更改了數(shù)據(jù)庫中的數(shù)據(jù)后,由于某種原因用戶不想提交此更改時(shí),oracle所采取的保護(hù)操作。這是一個(gè)把信息恢復(fù)到用戶使update、insert、delete前最后提交的狀態(tài)。
          commit????????提交。在完成數(shù)據(jù)庫的插入,刪除和修改操作時(shí),只有當(dāng)事務(wù)提交到數(shù)據(jù)庫才算完成,有提交前只有操作數(shù)據(jù)庫的本人才能看到,別人只有在最后提交完成才可以看到。

          接下來,我們在SQL*Plus中實(shí)戰(zhàn)一下,為我們下面將要做的打好基礎(chǔ)。
          用system登陸到SQL*Plus后,我們做如下操作(這次沒有截圖,有詳細(xì)的說明)
          SQL>create user maxuan identified by max; #創(chuàng)建口令為max的用戶maxuan
          SQL>grant connect,resource to maxuan; #為用戶maxuan授權(quán)
          SQL>conn maxuan/max; #以用戶maxuan進(jìn)行連接
          SQL>create table test(a number); #建立一個(gè)名為test的表,只有字段名為A的一列,數(shù)據(jù)類型為數(shù)字
          SQL>insert into test values(1); #插入一條記錄
          SQL>select * from test; #查詢記錄,此時(shí)A列的第一行為1
          SQL>update test set a=2; #更改記錄,此時(shí)A列的第一行已改為2
          SQL>commit; #提交
          SQL>delete from test; #刪除test表中所有的記錄,此時(shí)test表中沒有記錄
          SQL>roll; #回滾到提交前,此時(shí)再查詢test表,A列第一行值又回復(fù)到2

          oracle的數(shù)據(jù)類型
          在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表的時(shí)候,我們需要定義表中所有字段的類型,數(shù)據(jù)類型大致分為:character,numberic,date,lob和raw等,這些是最基本的數(shù)據(jù)類型。當(dāng)然在oracle中也允許自定義數(shù)據(jù)類型!

          在oracle中提供的character數(shù)據(jù)類型:
          char(<size>:固定長度字符串,最大長度為2000字節(jié),如果不指定長充,缺省為1個(gè)字節(jié)長。
          varchar2(<size>:可變長度的字符串,最大長度為4000字節(jié),具體定義時(shí)指明最大長度,這種類型可以放數(shù)字、字母以及ASCII碼字符集(或者EBCDIC等數(shù)據(jù)庫系統(tǒng)接受的字符集標(biāo)準(zhǔn))中的所有符號。如果數(shù)據(jù)長度沒有達(dá)到最大值,oracle會(huì)根據(jù)數(shù)據(jù)大小自動(dòng)調(diào)節(jié)字段長度。是最長用的數(shù)據(jù)類型。
          nchar(<size>:根據(jù)字符集而定的固定長度字符串,最大長度2000字節(jié)。
          nvarchar2(<size>:根據(jù)字符集而定的可變長度字符串,最大長度4000字節(jié)。
          long:可變長字符列,最大長度限制為2GB,用于不需要作字符串搜索的長串?dāng)?shù)據(jù)。此類型是一個(gè)遺留下來的而且將來不會(huì)被支持的數(shù)據(jù)類型,逐漸被BLOB,CLOB,NCLOB等大的數(shù)據(jù)類型所取代。

          numberic數(shù)據(jù)類型用來存儲負(fù)的和正的整數(shù),分?jǐn)?shù)和浮點(diǎn)型數(shù)據(jù),在oracle中提供的numberic數(shù)據(jù)類型:
          number(<m>,<n>:可變長的數(shù)值列,允許0、正值及負(fù)值,m是所有的有效數(shù)字的位數(shù),n是小數(shù)點(diǎn)以后的位數(shù)。

          在oracle中提供的date數(shù)據(jù)類型:
          date:缺省格式是dd-mon-yy(日-月-年)

          在oracle中提供的lob數(shù)據(jù)類型:
          blob、clob、nclob:三種大型對象(lob),用來保存較大的圖形文件或帶格式的文本文件,如word文檔,以及音頻、視頻等非文本文件,最大長充是4GB。暈些數(shù)據(jù)存儲在數(shù)據(jù)庫內(nèi)部保存。
          bfile:在數(shù)據(jù)庫外部保存的大型二進(jìn)制對象文件,最大長度是4GB,這種外部的LOB類型,通過數(shù)據(jù)庫記錄變化情況,但是數(shù)據(jù)的具體保存是在數(shù)據(jù)庫外部進(jìn)行的。

          在oracle中提供的raw數(shù)據(jù)類型:
          raw(<size>:可變長二進(jìn)制數(shù)據(jù),具體定義字段時(shí)必須指明最大長度,這種格式用來保存較小的圖形文件或帶格式的文本文件,它也是一種較老的數(shù)據(jù)類型,將被lob數(shù)據(jù)類型所取代。
          long raw:可變長二進(jìn)制數(shù)據(jù),最大長度是2GB,可以用來保存較大的圖形或帶格式的文本文件,以及音頻、視頻等非文本文件,這也是一種較老的數(shù)據(jù)類型,將被lob數(shù)據(jù)類型所取代。

          其它的數(shù)據(jù)類型:
          rowid:這是oracle數(shù)據(jù)表中的一個(gè)偽例,它是數(shù)據(jù)表中每行數(shù)據(jù)內(nèi)在的唯一標(biāo)識
          integer:整數(shù)類型


          創(chuàng)建購物網(wǎng)站后臺數(shù)據(jù)庫

          現(xiàn)在我們回到用J2EE體系開發(fā)購物網(wǎng)站的主題,開始實(shí)戰(zhàn)建購物網(wǎng)站的后臺數(shù)據(jù)庫。
          為了實(shí)現(xiàn)購物網(wǎng)站的基本的功能,我們需要建立四個(gè)表:商品列表(products)、商品類型表(item)、訂單列表(orders)和管理員列表(admin)。表結(jié)構(gòu)如下所示:

          item表結(jié)構(gòu)(商品類型表)
          字段名稱????數(shù)據(jù)類型????????允許空????主鍵/外鍵????備注????
          type_id????INTEGER(自動(dòng)編號)????????主鍵????商品類別ID標(biāo)記
          type????varchar2(30)????????????商品類別名稱

          product表結(jié)構(gòu)(商品列表)
          字段名稱????數(shù)據(jù)類型????????允許空????主鍵/外鍵????備注
          product_id????INTEGER(自動(dòng)編號)????????主鍵????商品ID標(biāo)記
          title????varchar2(30)????????????商品名稱
          type_id????INTEGER????????????外鍵????商品類別標(biāo)記
          info????varchar2(80)????????????商品簡介
          price????number(16,2)????????????商品價(jià)格

          orders表結(jié)構(gòu)(訂單列表)
          字段名稱????數(shù)據(jù)類型????????允許空????主鍵/外鍵????備注
          order_id????INTEGER(自動(dòng)編號)????????主鍵????訂單ID標(biāo)記
          name????varchar2(20)????????????顧客姓名
          address????varchar2(100)????????????發(fā)貨地址
          tel????number(16)????????????聯(lián)系電話
          email????varchar2(30)????????????聯(lián)系email
          btime????date????????????????訂購日期
          product_id????INTEGER????????????外鍵????商品標(biāo)記
          uword????varchar2(100)????????????顧客留言

          admin表結(jié)構(gòu)(管理員列表)
          字段名稱????數(shù)據(jù)類型????????允許空????主鍵/外鍵????備注
          admin_id????INTEGER(自動(dòng)編號)????????主鍵????管理員ID標(biāo)記
          adminname????varchar2(20)????????????管理員名稱
          password????varchar2(20)????????????管理員密碼

          設(shè)計(jì)完表結(jié)構(gòu)后,我們就要開始創(chuàng)建了。
          創(chuàng)建表我想已經(jīng)不是什么難事了,那么我們要注意的是product、item、orders這三個(gè)表之間的關(guān)聯(lián),還有自動(dòng)編號。

          下面是完整的SQL語句,在后面我會(huì)給出詳細(xì)的說明,你可以在SQL*Plus里對照著輸入,也可以將它存為SQL腳本文件,在SQL*Plus或SQLPlus Worksheet里執(zhí)行。當(dāng)然也可以把代碼直接拷貝到SQL*Plus里執(zhí)行!

          rem ///BY MAXUAN 開始///

          create table item(
          type_id integer not null,
          type varchar2(30),
          constraint item_pk primary key(type_id)
          );

          create table product(
          product_id integer not null,
          title varchar2(30) not null,
          type_id integer not null,
          info varchar2(80),
          price number(16,2) not null,
          constraint product_pk primary key (product_id),
          constraint product_fk foreign key(type_id) references item(type_id)
          );

          create table orders(
          order_id integer not null,
          name varchar2(20) not null,
          address varchar2(100),
          tel number(16),
          email varchar2(30) not null,
          btime date,
          product_id integer not null,
          uword varchar2(100),
          constraint orders_pk primary key(order_id),
          constraint orders_fk foreign key(product_id) references product(product_id)
          );

          create table admin(
          admin_id integer not null,
          adminname varchar2(20) not null,
          password varchar2(20) not null,
          constraint admin_pk primary key(admin_id)
          );

          create sequence type_id increment by 1 start with 1;
          create sequence product_id increment by 1 start with 1;
          create sequence order_id increment by 1 start with 1;
          create sequence admin_id increment by 1 start with 1;

          rem ///BY MAXUAN 結(jié)束///

          說明一:建立表之間的關(guān)聯(lián)
            product、item、orders三個(gè)表通過公共域,通常稱為鍵域(Key Field)進(jìn)行關(guān)聯(lián),存在兩種類型的鍵:主鍵(Primary key)和外部鍵(Foreign key)。主鍵使表中的數(shù)據(jù)行保持唯一,在表product中,product_id為主鍵,表orders中也包含有product_id,此時(shí)的product_id就是外部鍵。一個(gè)表的外部鍵從其它表中獲取信息。看看上面的SQL語句,應(yīng)該會(huì)了吧!建立主外鍵的SQL語句詳解如下:
          constraint 主鍵名 primary key (字段名)
          constraint 外部鍵名 foreign key(字段名) references 對應(yīng)表(對應(yīng)字段)
          當(dāng)不指名主鍵名或外部鍵名時(shí),系統(tǒng)將使用默認(rèn)名稱!
          如果你要?jiǎng)h除一個(gè)主鍵或外部鍵時(shí),用如下寫法:
          ALTER TABLE 表名 DROP CONSTRAINT 主鍵名或外部鍵名
          如果是主/唯一關(guān)鍵字被外部鍵引用,先要?jiǎng)h除外部鍵,然后才能刪除主鍵!!

          說明二:關(guān)于自動(dòng)編號
            在access中有自動(dòng)編號的數(shù)據(jù)類型,MSSQL和MYSQL也都有自動(dòng)增長的數(shù)據(jù)類型,插入記錄時(shí)不用操作此字段,會(huì)自動(dòng)獲得數(shù)據(jù)值,而oracle沒有自動(dòng)增長的數(shù)據(jù)類型,我們需要建立一個(gè)自動(dòng)增長的序列號,插入記錄時(shí)要把序列號的下一個(gè)值賦于此字段,可以預(yù)見的是,有此功能,我們可以把數(shù)據(jù)從ACCESS、MSSQL或MYSQL遷移到oracle了!
          create sequence type_id increment by 1 start with 1;
          這句中,type_id為序列號的名稱,每次增長為1,起始序號為1。
          如果要?jiǎng)h除序列,用drop sequence 序列名就可以了!!



          posted on 2006-12-13 17:57 mlw2000 閱讀(496) 評論(0)  編輯  收藏 所屬分類: databases

          主站蜘蛛池模板: 通海县| 黎平县| 峨山| 达尔| 平泉县| 来宾市| 承德市| 苍溪县| 姜堰市| 交城县| 清远市| 井陉县| 怀集县| 宜川县| 桓台县| 花莲县| 德兴市| 常德市| 紫阳县| 苍溪县| 巫溪县| 美姑县| 台江县| 陆丰市| 许昌县| 兴化市| 朝阳区| 罗甸县| 获嘉县| 衡水市| 车致| 碌曲县| 双柏县| 江源县| 行唐县| 浠水县| 环江| 石林| 浦东新区| 运城市| 乐安县|