明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

J2EE 開發(fā)購物網(wǎng)站 經(jīng)驗篇 - 建表

[摘要]GO ON 繼續(xù)進階!(本貼個人認為對初學者很有幫助,請大家認真看。因時間倉促,如有錯誤請指正)SQL*PLUS基礎在上一貼中,我們掌握了些基本的oracle操作,如創(chuàng)建、授權用戶,創(chuàng)建數(shù)據(jù)庫等。在OEM(Oracle Enterprise Manager)可視化的窗口環(huán)境中,雖然我們也可以很方...

GO ON 繼續(xù)進階!!(本貼個人認為對初學者很有幫助,請大家認真看。因時間倉促,如有錯誤請指正)
SQL*PLUS基礎
在上一貼中,我們掌握了些基本的oracle操作,如創(chuàng)建、授權用戶,創(chuàng)建數(shù)據(jù)庫等。在OEM(Oracle Enterprise Manager)可視化的窗口環(huán)境中,雖然我們也可以很方便地做這些事,但是事實上,用SQL語言書寫在開發(fā)上更有效率!oracle提供的SQL*Plus就是個不錯的工具,如果大家喜歡窗口的開發(fā)環(huán)境,用SQLPlus Worksheet也行!下面說點基本的西西!SQL(Structure Query Language)語言是結構化查詢語言,是數(shù)據(jù)庫的核心語言,是面向集合的描述性非過程化語言。
SQL語言共分為四大類:數(shù)據(jù)查詢語言DQL,數(shù)據(jù)操縱語言DML,數(shù)據(jù)定義語言DDL,數(shù)據(jù)庫控制語言DCL。1.數(shù)據(jù)查詢語言DQL的基本結構是由select子句,from子句,where子句組成的查詢塊:
select <字段名表> from <表或視圖名> where <查詢條件>2.數(shù)據(jù)操縱語言DML完成在數(shù)據(jù)庫中確定、修改、添加、刪除某一數(shù)據(jù)值的任務(以下是部分常用DML語句):
insert    增加數(shù)據(jù)行到表
delete    從表中刪除數(shù)據(jù)行
Update    更改表中數(shù)據(jù)3.數(shù)據(jù)定義語言DDL完成定義數(shù)據(jù)庫的結構,包括數(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ù)庫的某種特權,并控制數(shù)據(jù)庫操縱事務發(fā)生的時間及效果,對數(shù)據(jù)庫實行監(jiān)視等。如:
grant        將權限或角色授予用戶或其它角色
revoke        回收用戶權限
roll        回滾,是當某個對話更改了數(shù)據(jù)庫中的數(shù)據(jù)后,由于某種原因用戶不想提交此更改時,oracle所采取的保護操作。這是一個把信息恢復到用戶使update、insert、delete前最后提交的狀態(tài)。
commit        提交。在完成數(shù)據(jù)庫的插入,刪除和修改操作時,只有當事務提交到數(shù)據(jù)庫才算完成,有提交前只有操作數(shù)據(jù)庫的本人才能看到,別人只有在最后提交完成才可以看到。接下來,我們在SQL*Plus中實戰(zhàn)一下,為我們下面將要做的打好基礎。
用system登陸到SQL*Plus后,我們做如下操作(這次沒有截圖,有詳細的說明)
SQL>create user maxuan identified by max; #創(chuàng)建口令為max的用戶maxuan
SQL>grant connect,resource to maxuan; #為用戶maxuan授權
SQL>conn maxuan/max; #以用戶maxuan進行連接
L>create table test(a number); #建立一個名為test的表,只有字段名為A的一列,數(shù)據(jù)類型為數(shù)字
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列第一行值又回復到2oracle的數(shù)據(jù)類型
在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表的時候,我們需要定義表中所有字段的類型,數(shù)據(jù)類型大致分為:character,numberic,date,lob和raw等,這些是最基本的數(shù)據(jù)類型。當然在oracle中也允許自定義數(shù)據(jù)類型!在oracle中提供的character數(shù)據(jù)類型:
char(<size>):固定長度字符串,最大長度為2000字節(jié),如果不指定長充,缺省為1個字節(jié)長。
varchar2(<size>):可變長度的字符串,最大長度為4000字節(jié),具體定義時指明最大長度,這咱類型可以放數(shù)字、字母以及ASCII碼字符集(或者EBCDIC等數(shù)據(jù)庫系統(tǒng)接受的字符集標準)中的所有符號。如果數(shù)據(jù)長度沒有達到最大值,oracle會根據(jù)數(shù)據(jù)大小自動調節(jié)字段長度。是最長用的數(shù)據(jù)類型。
nchar(<size>):根據(jù)字符集而定的固定長度字符串,最大長度2000字節(jié)。
nvarchar2(<size>):根據(jù)字符集而定的可變長度字符串,最大長度4000字節(jié)。
long:可變長字符列,最大長度限制為2GB,用于不需要作字符串搜索的長串數(shù)據(jù)。此類型是一個遺留下來的而且將來不會被支持的數(shù)據(jù)類型,逐漸被BLOB,CLOB,NCLOB等大的數(shù)據(jù)類型所取代。numberic數(shù)據(jù)類型用來存儲負的和正的整數(shù),分數(shù)和浮點型數(shù)據(jù),在oracle中提供的numberic數(shù)據(jù)類型:
number(<m>,<n>):可變長的數(shù)值列,允許0、正值及負值,m是所有的有效數(shù)字的位數(shù),n是小數(shù)點以后的位數(shù)。在oracle中提供的date數(shù)據(jù)類型:
date:缺省格式是dd-mon-yy(日-月-年)在oracle中提供的lob數(shù)據(jù)類型:
blob、clob、nclob:三種大型對象(lob),用來保存較大的圖形文件或帶格式的文本文件,如word文檔,以及音頻、視頻等非文本文件,最大長充是4GB。暈些數(shù)據(jù)存儲在數(shù)據(jù)庫內部保存。
bfile:在數(shù)據(jù)庫外部保存的大型二進制對象文件,最大長度是4GB,這種外部的LOB類型,通過數(shù)據(jù)庫記錄變化情況,但是數(shù)據(jù)的具體保存是在數(shù)據(jù)庫外部進行的。在oracle中提供的raw數(shù)據(jù)類型:
raw(<size>):可變長二進制數(shù)據(jù),具體定義字段時必須指明最大長度,這種格式用來保存較小的圖形文件或帶格式的文本文件,它也是一種較老的數(shù)據(jù)類型,將被lob數(shù)據(jù)類型所取代。
long raw:可變長二進制數(shù)據(jù),最大長度是2GB,可以用來保存較大的圖形或帶格式的文本文件,以及音頻、視頻等非文本文件,這也是一種較老的數(shù)據(jù)類型,將被lob數(shù)據(jù)類型所取代。其它的數(shù)據(jù)類型:
rowid:這是oracle數(shù)據(jù)表中的一個偽例,它是數(shù)據(jù)表中每行數(shù)據(jù)內在的唯一標識
integer:整數(shù)類型
創(chuàng)建購物網(wǎng)站后臺數(shù)據(jù)庫現(xiàn)在我們回到用J2EE體系開發(fā)購物網(wǎng)站的主題,開始實戰(zhàn)建購物網(wǎng)站的后臺數(shù)據(jù)庫。
為了實現(xiàn)購物網(wǎng)站的基本的功能,我們需要建立四個表:商品列表(products)、商品類型表(item)、訂單列表(orders)和管理員列表(admin)。表結構如下所示:item表結構(商品類型表)
字段名稱    數(shù)據(jù)類型        允許空    主鍵/外鍵    備注   
type_id    INTEGER(自動編號)    否    主鍵    商品類別ID標記
type    varchar2(30)    否        商品類別名稱product表結構(商品列表)
字段名稱    數(shù)據(jù)類型        允許空    主鍵/外鍵    備注
product_id    INTEGER(自動編號)    否    主鍵    商品ID標記
title    varchar2(30)    否        商品名稱
type_id    INTEGER        否    外鍵    商品類別標記
info    varchar2(80)    是        商品簡介
price    number(16,2)    否        商品價格orders表結構(訂單列表)
字段名稱    數(shù)據(jù)類型        允許空    主鍵/外鍵    備注
order_id    INTEGER(自動編號)    否    主鍵    訂單ID標記
name    varchar2(20)    否        顧客姓名
address    varchar2(100)    是        發(fā)貨地址
tel    number(16)    是        聯(lián)系電話
email    varchar2(30)    否        聯(lián)系email
btime    date        是        訂購日期
product_id    INTEGER        否    外鍵    商品標記
uword    varchar2(100)    是        顧客留言admin表結構(管理員列表)
字段名稱    數(shù)據(jù)類型        允許空    主鍵/外鍵    備注
admin_id    INTEGER(自動編號)    否    主鍵    管理員ID標記
adminname    varchar2(20)    否        管理員名稱
password    varchar2(20)    否        管理員密碼設計完表結構后,我們就要開始創(chuàng)建了。
創(chuàng)建表我想已經(jīng)不是什么難事了,那么我們要注意的是product、item、orders這三個表之間的關聯(lián),還有自動編號。下面是完整的SQL語句,在后面我會給出詳細的說明,你可以在SQL*Plus里對照著輸入,也可以將它存為SQL腳本文件,在SQL*Plus或SQLPlus Worksheet里執(zhí)行。當然也可以把代碼直接拷貝到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 結束///
[Ctrl+A 全部選擇 然后拷貝]說明一:建立表之間的關聯(lián)
product、item、orders三個表通過公共域,通常稱為鍵域(Key Field)進行關聯(lián),存在兩種類型的鍵:主鍵(Primary key)和外部鍵(Foreign key)。主鍵使表中的數(shù)據(jù)行保持唯一,在表product中,product_id為主鍵,表orders中也包含有product_id,此時的product_id就是外部鍵。一個表的外部鍵從其它表中獲取信息?纯瓷厦娴腟QL語句,應該會了吧!說明二:關于自動編號
在access中有自動編號的數(shù)據(jù)類型,MSSQL和MYSQL也都有自動增長的數(shù)據(jù)類型,插入記錄時不用操作此字段,會自動獲得數(shù)據(jù)值,而oracle沒有自動增長的數(shù)據(jù)類型,我們需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦于此字段,可以預見的是,有此功能,我們可以把數(shù)據(jù)從ACCESS、MSSQL或MYSQL遷移到oracle了!
create sequence type_id increment by 1 start with 1;
這句中,type_id為序列號的名稱,每次增長為1,起始序號為1。好了,咱們的數(shù)據(jù)庫已經(jīng)建好了,而且從中也了解到一些基本的相關知識,關于本人的用J2EE開發(fā)購物網(wǎng)站之二oracle篇到此結束,如有什么疑問請留言!!
在接下的第三篇weblogic中,本人將繼續(xù)把個人心血經(jīng)驗無償奉上,希望大家能從中有所收獲!謝謝支持!
PS:寫得真累,快趕上出書了!