OMG,到底在尋找什么..................
          (構造一個完美的J2EE系統所需要的完整知識體系)
          posts - 198,  comments - 37,  trackbacks - 0

          原貼地址:http://www.blueidea.com/tech/program/2003/49_4.asp

          GO ON 繼續進階!!(本貼個人認為對初學者很有幫助,請大家認真看。因時間倉促,如有錯誤請指正)
          SQL*PLUS基礎
          在上一貼中,我們掌握了些基本的oracle操作,如創建、授權用戶,創建數據庫等。在OEM(Oracle Enterprise Manager)可視化的窗口環境中,雖然我們也可以很方便地做這些事,但是事實上,用SQL語言書寫在開發上更有效率!!oracle提供的SQL*Plus就是個不錯的工具,如果大家喜歡窗口的開發環境,用SQLPlus Worksheet也行!下面說點基本的西西!

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

          1.數據查詢語言DQL的基本結構是由select子句,from子句,where子句組成的查詢塊:
          select <字段名表> from <表或視圖名> where <查詢條件>

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

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

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

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

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

          在oracle中提供的character數據類型:
          char(<size>):固定長度字符串,最大長度為2000字節,如果不指定長充,缺省為1個字節長。
          varchar2(<size>):可變長度的字符串,最大長度為4000字節,具體定義時指明最大長度,這咱類型可以放數字、字母以及ASCII碼字符集(或者EBCDIC等數據庫系統接受的字符集標準)中的所有符號。如果數據長度沒有達到最大值,oracle會根據數據大小自動調節字段長度。是

          最長用的數據類型。
          nchar(<size>):根據字符集而定的固定長度字符串,最大長度2000字節。
          nvarchar2(<size>):根據字符集而定的可變長度字符串,最大長度4000字節。
          long:可變長字符列,最大長度限制為2GB,用于不需要作字符串搜索的長串數據。此類型是一個遺留下來的而且將來不會被支持的數據類型,逐漸被BLOB,CLOB,NCLOB等大的數據類型所取代。

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

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

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

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

          其它的數據類型:
          rowid:這是oracle數據表中的一個偽例,它是數據表中每行數據內在的唯一標識
          integer:整數類型


          創建購物網站后臺數據庫

          現在我們回到用J2EE體系開發購物網站的主題,開始實戰建購物網站的后臺數據庫。
          為了實現購物網站的基本的功能,我們需要建立四個表:商品列表(products)、商品類型表(item)、訂單列表(orders)和管理員列表(admin)。表結構如下所示:

          item表結構(商品類型表)
          字段名稱??? 數據類型??????? 允許空??? 主鍵/外鍵??? 備注???
          type_id??? INTEGER(自動編號)??? 否??? 主鍵??? 商品類別ID標記
          type??? varchar2(30)??? 否??????? 商品類別名稱

          product表結構(商品列表)
          字段名稱??? 數據類型??????? 允許空??? 主鍵/外鍵??? 備注
          product_id??? INTEGER(自動編號)??? 否??? 主鍵??? 商品ID標記
          title??? varchar2(30)??? 否??????? 商品名稱
          type_id??? INTEGER??????? 否??? 外鍵??? 商品類別標記
          info??? varchar2(80)??? 是??????? 商品簡介
          price??? number(16,2)??? 否??????? 商品價格

          orders表結構(訂單列表)
          字段名稱??? 數據類型??????? 允許空??? 主鍵/外鍵??? 備注
          order_id??? INTEGER(自動編號)??? 否??? 主鍵??? 訂單ID標記
          name??? varchar2(20)??? 否??????? 顧客姓名
          address??? varchar2(100)??? 是??????? 發貨地址
          tel??? number(16)??? 是??????? 聯系電話
          email??? varchar2(30)??? 否??????? 聯系email
          btime??? date??????? 是??????? 訂購日期
          product_id??? INTEGER??????? 否??? 外鍵??? 商品標記
          uword??? varchar2(100)??? 是??????? 顧客留言

          admin表結構(管理員列表)
          字段名稱??? 數據類型??????? 允許空??? 主鍵/外鍵??? 備注
          admin_id??? INTEGER(自動編號)??? 否??? 主鍵??? 管理員ID標記
          adminname??? varchar2(20)??? 否??????? 管理員名稱
          password??? varchar2(20)??? 否??????? 管理員密碼

          設計完表結構后,我們就要開始創建了。
          創建表我想已經不是什么難事了,那么我們要注意的是product、item、orders這三個表之間的關聯,還有自動編號。

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

          代碼拷貝框

          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 結束///

          說明一:建立表之間的關聯
            product、item、orders三個表通過公共域,通常稱為鍵域(Key Field)進行關聯,存在兩種類型的鍵:主鍵(Primary key)和外部鍵(Foreign key)。主鍵使表中的數據行保持唯一,在表product中,product_id為主鍵,表orders中也包含有product_id,此時的product_id就是外部鍵。一個表的外部鍵從其它表中獲取信息。看看上面的SQL語句,應該會了吧!

          說明二:關于自動編號
            在access中有自動編號的數據類型,MSSQL和MYSQL也都有自動增長的數據類型,插入記錄時不用操作此字段,會自動獲得數據值,而oracle沒有自動增長的數據類型,我們需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦于此字段,可以預見的是,有此功能,我們可以把數據從ACCESS、MSSQL或MYSQL遷移到oracle了!
          create sequence type_id increment by 1 start with 1;
          這句中,type_id為序列號的名稱,每次增長為1,起始序號為1。

            好了,咱們的數據庫已經建好了,而且從中也了解到一些基本的相關知識,關于本人的用J2EE開發購物網站之二oracle篇到此結束,如有什么疑問請留言!!
            在接下的第三篇weblogic中,本人將繼續把個人心血經驗無償奉上,希望大家能從中有所收獲!!謝謝支持!
          PS:寫得真累,快趕上出書了!!

          編輯:家偉。
          本文章系發表在經典論壇的一篇精華帖子,感謝maxuan9的辛勤勞動!!

          posted on 2006-06-01 12:09 OMG 閱讀(203) 評論(0)  編輯  收藏 所屬分類: 電子商務開發

          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經典網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桃园市| 类乌齐县| 都江堰市| 临泉县| 双峰县| 和平县| 大兴区| 山丹县| 铜陵市| 比如县| 广东省| 高雄市| 武平县| 宁乡县| 黄龙县| 简阳市| 赞皇县| 佛学| 海口市| 祁阳县| 锦屏县| 云安县| 甘洛县| 平果县| 兴城市| 阿坝| 驻马店市| 阳江市| 浦东新区| 托里县| 灌阳县| 平顺县| 桐柏县| 仪征市| 广宁县| 秀山| 温泉县| 双鸭山市| 仁怀市| 锦屏县| 沾益县|