注:登入SQLPLUS時(shí)報(bào)錯(cuò),如下:
請(qǐng)輸入用戶名: system
請(qǐng)輸入用戶名: system
輸入口令:
ERROR:
ORA-12560: TNS: 協(xié)議適配器錯(cuò)誤
原因:是ORCAL實(shí)例沒(méi)啟動(dòng)(net [start/stop] 服務(wù)名).與Linux相反,不在SQLPLUS中啟動(dòng)實(shí)例.
原因:是ORCAL實(shí)例沒(méi)啟動(dòng)(net [start/stop] 服務(wù)名).與Linux相反,不在SQLPLUS中啟動(dòng)實(shí)例.
平臺(tái): windows server 2003 Enterprise Editon , oracle 10g(10.02.00.01)
- 運(yùn)行"開(kāi)始->程序\Oracle - OraDb10g_home1\配置和移植工具"中的"Database Configuration Assistant",創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。
- 創(chuàng)建成功后,運(yùn)行"開(kāi)始->程序\Oracle - OraDb10g_home1\應(yīng)用程序開(kāi)發(fā)"中的"SQL Plus".用戶名:sys 密碼:123456 as sysdba(密碼后面要加空格as空格sysdba) 主機(jī)字符串:如果是本機(jī)可不填。
-
從命令提示符下使用sql*plus
sqlplus/nolog
conn 用戶名/密碼 as sysdba 出現(xiàn)”已連接“后就是成功了。
接下來(lái),我們?cè)赟QL*Plus中實(shí)戰(zhàn)一下,為我們下面將要做的打好基礎(chǔ)。
用system登陸到SQL*Plus后,我們做如下操作(這次沒(méi)有截圖,有詳細(xì)的說(shuō)明)
-----------如登陸成功此1-3步不必做,直接做第4步----------------
- 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ù)類(lèi)型為數(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; #提交.在完成數(shù)據(jù)庫(kù)的插入,刪除和修改操作時(shí),只有當(dāng)事務(wù)提交到數(shù)據(jù)庫(kù)才算完成。
- SQL>delete from test; #刪除test表中所有的記錄,此時(shí)test表中沒(méi)有記錄
- SQL>roll; #回滾到提交前,此時(shí)再查詢test表,A列第一行值又回復(fù)到2
oracle的數(shù)據(jù)類(lèi)型
在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表的時(shí)候,我們需要定義表中所有字段的類(lèi)型,數(shù)據(jù)類(lèi)型大致分為:character,numberic,date,lob和raw等,這些是最基本的數(shù)據(jù)類(lèi)型。當(dāng)然在oracle中也允許自定義數(shù)據(jù)類(lèi)型!
在oracle中提供的character數(shù)據(jù)類(lèi)型:
char():固定長(zhǎng)度字符串,最大長(zhǎng)度為2000字節(jié),如果不指定長(zhǎng)充,缺省為1個(gè)字節(jié)長(zhǎng)。
varchar2():可變長(zhǎng)度的字符串,最大長(zhǎng)度為4000字節(jié),具體定義時(shí)指明最大長(zhǎng)度,這咱類(lèi)型可以放數(shù)字、字母以及ASCII碼字符集(或者EBCDIC等數(shù)據(jù)庫(kù)系統(tǒng)接受的字符集標(biāo)準(zhǔn))中的所有符號(hào)。如果數(shù)據(jù)長(zhǎng)度沒(méi)有達(dá)到最大值,oracle會(huì)根據(jù)數(shù)據(jù)大小自動(dòng)調(diào)節(jié)字段長(zhǎng)度。是
最長(zhǎng)用的數(shù)據(jù)類(lèi)型。
nchar():根據(jù)字符集而定的固定長(zhǎng)度字符串,最大長(zhǎng)度2000字節(jié)。
nvarchar2():根據(jù)字符集而定的可變長(zhǎng)度字符串,最大長(zhǎng)度4000字節(jié)。
long:可變長(zhǎng)字符列,最大長(zhǎng)度限制為2GB,用于不需要作字符串搜索的長(zhǎng)串?dāng)?shù)據(jù)。此類(lèi)型是一個(gè)遺留下來(lái)的而且將來(lái)不會(huì)被支持的數(shù)據(jù)類(lèi)型,逐漸被BLOB,CLOB,NCLOB等大的數(shù)據(jù)類(lèi)型所取代。
numberic數(shù)據(jù)類(lèi)型用來(lái)存儲(chǔ)負(fù)的和正的整數(shù),分?jǐn)?shù)和浮點(diǎn)型數(shù)據(jù),在oracle中提供的numberic數(shù)據(jù)類(lèi)型:
number(,):可變長(zhǎng)的數(shù)值列,允許0、正值及負(fù)值,m是所有的有效數(shù)字的位數(shù),n是小數(shù)點(diǎn)以后的位數(shù)。
在oracle中提供的date數(shù)據(jù)類(lèi)型:
date:缺省格式是dd-mon-yy(日-月-年)
在oracle中提供的lob數(shù)據(jù)類(lèi)型:
blob、clob、nclob:三種大型對(duì)象(lob),用來(lái)保存較大的圖形文件或帶格式的文本文件,如word文檔,以及音頻、視頻等非文本文件,最大長(zhǎng)充是4GB。暈些數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi)部保存。
bfile:在數(shù)據(jù)庫(kù)外部保存的大型二進(jìn)制對(duì)象文件,最大長(zhǎng)度是4GB,這種外部的LOB類(lèi)型,通過(guò)數(shù)據(jù)庫(kù)記錄變化情況,但是數(shù)據(jù)的具體保存是在數(shù)據(jù)庫(kù)外部進(jìn)行的。
在oracle中提供的raw數(shù)據(jù)類(lèi)型:
raw():可變長(zhǎng)二進(jìn)制數(shù)據(jù),具體定義字段時(shí)必須指明最大長(zhǎng)度,這種格式用來(lái)保存較小的圖形文件或帶格式的文本文件,它也是一種較老的數(shù)據(jù)類(lèi)型,將被lob數(shù)據(jù)類(lèi)型所取代。
long raw:可變長(zhǎng)二進(jìn)制數(shù)據(jù),最大長(zhǎng)度是2GB,可以用來(lái)保存較大的圖形或帶格式的文本文件,以及音頻、視頻等非文本文件,這也是一種較老的數(shù)據(jù)類(lèi)型,將被lob數(shù)據(jù)類(lèi)型所取代。
其它的數(shù)據(jù)類(lèi)型:
rowid:這是oracle數(shù)據(jù)表中的一個(gè)偽例,它是數(shù)據(jù)表中每行數(shù)據(jù)內(nèi)在的唯一標(biāo)識(shí)
integer:整數(shù)類(lèi)型
補(bǔ)充知識(shí):
SQL(Structure Query Language)語(yǔ)言是結(jié)構(gòu)化查詢語(yǔ)言,是數(shù)據(jù)庫(kù)的核心語(yǔ)言,是面向集合的描述性非過(guò)程化語(yǔ)言。SQL語(yǔ)言共分為四大類(lèi):數(shù)據(jù)查詢語(yǔ)言DQL,數(shù)據(jù)操縱語(yǔ)言DML,數(shù)據(jù)定義語(yǔ)言DDL,數(shù)據(jù)庫(kù)控制語(yǔ)言DCL。
1.數(shù)據(jù)查詢語(yǔ)言DQL的基本結(jié)構(gòu)是由select子句,from子句,where子句組成的查詢塊:
select <字段名表> from <表或視圖名> where <查詢條件>
2.數(shù)據(jù)操縱語(yǔ)言DML完成在數(shù)據(jù)庫(kù)中確定、修改、添加、刪除某一數(shù)據(jù)值的任務(wù)(以下是部分常用DML語(yǔ)句):
insert 增加數(shù)據(jù)行到表
delete 從表中刪除數(shù)據(jù)行
Update 更改表中數(shù)據(jù)
3.數(shù)據(jù)定義語(yǔ)言DDL完成定義數(shù)據(jù)庫(kù)的結(jié)構(gòu),包括數(shù)據(jù)庫(kù)本身、數(shù)據(jù)表、目錄、視圖等數(shù)據(jù)庫(kù)元素(以下是部分常用DDL語(yǔ)句)
create table 創(chuàng)建表
create index 創(chuàng)建索引
create view 創(chuàng)建視圖
alter table 增加表列,重定義表列,更改存儲(chǔ)分配
drop table 刪除表
drop index 刪除索引
4.數(shù)據(jù)庫(kù)控制語(yǔ)言DCL用來(lái)授予或回收訪問(wèn)數(shù)據(jù)庫(kù)的某種特權(quán),并控制數(shù)據(jù)庫(kù)操縱事務(wù)發(fā)生的時(shí)間及效果,對(duì)數(shù)據(jù)庫(kù)實(shí)行監(jiān)視等。如:
grant 將權(quán)限或角色授予用戶或其它角色
revoke 回收用戶權(quán)限
roll 回滾,是當(dāng)某個(gè)對(duì)話更改了數(shù)據(jù)庫(kù)中的數(shù)據(jù)后,由于某種原因用戶不想提交此更改時(shí),oracle所采取的保護(hù)操作。這是一個(gè)把信息恢復(fù)到用戶使update、insert、delete前最后提交的狀態(tài)。
commit 提交。在完成數(shù)據(jù)庫(kù)的插入,刪除和修改操作時(shí),只有當(dāng)事務(wù)提交到數(shù)據(jù)庫(kù)才算完成,有提交前只有操作數(shù)據(jù)庫(kù)的本人才能看到,別人只有在最后提交完成才可以看到。
一個(gè)購(gòu)物網(wǎng)站后臺(tái)數(shù)據(jù)庫(kù)實(shí)例:
現(xiàn)在我們回到用J2EE體系開(kāi)發(fā)購(gòu)物網(wǎng)站的主題,開(kāi)始實(shí)戰(zhàn)建購(gòu)物網(wǎng)站的后臺(tái)數(shù)據(jù)庫(kù)。
為了實(shí)現(xiàn)購(gòu)物網(wǎng)站的基本的功能,我們需要建立四個(gè)表:商品列表(products)、商品類(lèi)型表(item)、訂單列表(orders)和管理員列表(admin)。表結(jié)構(gòu)如下所示:
item表結(jié)構(gòu)(商品類(lèi)型表)
字段名稱 數(shù)據(jù)類(lèi)型 允許空 主鍵/外鍵 備注
type_id INTEGER(自動(dòng)編號(hào)) 否 主鍵 商品類(lèi)別ID標(biāo)記
type varchar2(30) 否 商品類(lèi)別名稱
product表結(jié)構(gòu)(商品列表)
字段名稱 數(shù)據(jù)類(lèi)型 允許空 主鍵/外鍵 備注
product_id INTEGER(自動(dòng)編號(hào)) 否 主鍵 商品ID標(biāo)記
title varchar2(30) 否 商品名稱
type_id INTEGER 否 外鍵 商品類(lèi)別標(biāo)記
info varchar2(80) 是 商品簡(jiǎn)介
price number(16,2) 否 商品價(jià)格
orders表結(jié)構(gòu)(訂單列表)
字段名稱 數(shù)據(jù)類(lèi)型 允許空 主鍵/外鍵 備注
order_id INTEGER(自動(dòng)編號(hào)) 否 主鍵 訂單ID標(biāo)記
name varchar2(20) 否 顧客姓名
address varchar2(100) 是 發(fā)貨地址
tel number(16) 是 聯(lián)系電話
email varchar2(30) 否 聯(lián)系email
btime date 是 訂購(gòu)日期
product_id INTEGER 否 外鍵 商品標(biāo)記
uword varchar2(100) 是 顧客留言
admin表結(jié)構(gòu)(管理員列表)
字段名稱 數(shù)據(jù)類(lèi)型 允許空 主鍵/外鍵 備注
admin_id INTEGER(自動(dòng)編號(hào)) 否 主鍵 管理員ID標(biāo)記
adminname varchar2(20) 否 管理員名稱
password varchar2(20) 否 管理員密碼
設(shè)計(jì)完表結(jié)構(gòu)后,我們就要開(kāi)始創(chuàng)建了。
創(chuàng)建表我想已經(jīng)不是什么難事了,那么我們要注意的是product、item、orders這三個(gè)表之間的關(guān)聯(lián),還有自動(dòng)編號(hào)。
下面是完整的SQL語(yǔ)句,在后面我會(huì)給出詳細(xì)的說(shuō)明,你可以在SQL*Plus里對(duì)照著輸入,也可以將它存為SQL腳本文件,在SQL*Plus或SQLPlus Worksheet里執(zhí)行。當(dāng)然也可以把代碼直接拷貝到SQL*Plus里執(zhí)行!
代碼:
rem ///BY MAXUAN 開(kāi)始///
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)
);