馬果老師整理
問題1:什麼oracle?
- oracle是美國甲骨文開發的一款數據庫
問題2:oracle數據庫的特點
- 它的安全性高、運行穩定
- 它的數據類型非常豐富,它提供了一些特殊的數據類型(僞列、大對象)
- 它非常適合用於企業級項目(適用於中、大型項目)
問題3:oracle數據庫有哪些版本?
- oracle主要的版本有:7i,8i,9i,10G,11G,12C
- 我們學習的版本是11G
問題4:安裝oracle (oracle數據庫官網可以免費下載)
oracle的安裝版本有兩種類型:
- 完整版oracle:完整版的功能比較全,但體積較大,安裝比較慢
- 簡化版oracle:功能進行了簡化,但基本功能都有,體積小,安裝較快
問題5:安裝oracle要注意的細節
- oracle安裝時,安裝目錄一定不能包含:中文字符與空格
- 安裝簡化版oracle時,安裝過程中,會有兩處警告,忽略即可
- 安裝數據庫時,在最後階段,系統會提示指定:密碼,這個密碼不要忘記
問題6: 如何判斷oracle數據庫是否安裝好
- 進入cmd
- 輸入 sqlplus
- 分別輸入system(這是系統賬號)以及密碼,如果可以登錄成功,即表示:oracle安裝成功(注意:在輸入密碼時,密碼是不可見的)
問題7:oracle數據庫運行時,比較消耗內存資源,建議大家將oracle的服務設置爲:手動啓動
問題8:要使用oracle數據庫,需要開啓哪些服務?
服務1:OracleServiceXE,只要開啓這個服務就可以訪問直接數據庫
- 如果是簡化版該服務的名稱是:OracleServiceXE
- 如果是完整版該服務的名稱是:OracleServiceORCL
此處的 XE 或者是 ORCL就是oracle的數據庫名,要用代碼連接時,數據庫名稱就需要指定爲這個名稱
注意:如果只開啓這一個服務,數據庫可以直接通過控制檯訪問,但是不能用第三方工具,或者java代碼訪問
服務2:OracleXETNSListener ,這是oracle中的監聽服務,開啓該服務纔可以用java代碼或第三方工具連接數據庫
- 簡化版該服務的名稱是:OracleXETNSListener
- 完整版該服務的名稱是:OracleORCLTNSListener
問題9: oracle數據庫的安全性很好,要執行對應的操作,一定要有對應的權限. oracle數據庫有三種不同用戶角色,這些角色擁有數據庫權限也不同
角色1:sysdba (數據庫管理員),它的權限等級最高,可以執行所有操作
- 創建表空間、創建用戶、分配用戶權限
- 創建表、以及對數據進行增刪改的各種操作
- 數據庫裝載、卸載
裝載數據庫:讓數據庫恢復使用
卸載數據庫:讓數據庫暫停使用
角色2:sysoper (數據庫操作員),它的權限等級僅次於sysdba,除了不能載、卸載數據庫裝,其他操作都可以
- 創建表空間、創建用戶、分配用戶權限
- 創建表、以及對數據進行增刪改的各種操作
角色3: normal (普通用戶),它的所有操作,都要經過授權纔可以
注意,我們一般使用的是:normal角色的用戶,之前的系統賬號system的角色類型爲: sysoper
oracle數據庫服務器的基本結構:
在oracle中,所有數據表、數據都是存放在表空間(tablespace)中,oracle中的表空間的概念,就相當於mysql
中database的概念
我們使用oracle都是使用普通用戶角色,所以,一般會首先創建一個普通用戶:
要創建用戶,必須有權限纔可以 (sysdba,sysoper),使用system它是操作員權限,可以創建用戶、創建表空間
@@@@@@@創建步驟:
先用system登錄,登錄方式有兩種:
- cmd--->sqlplus--->分別輸入用戶名、密碼
- cmd--->sqlplus system/system
創建表空間
- 語法: create tablespace 表空間名稱 datafile 'd:/xxx/xx.dbf' size 50m autoextend on next 20m;
- 示例: create tablespace d91space datafile 'd:/data/d91.dbf' size 50m autoextend on next 20m;
注意:表空間的路徑中不要包含中文與空格
創建新用戶
-
語法:create user 用戶名 identified by 密碼 default tablespace 表空間名稱;
-
示例: create user d91 identified by d91 default tablespace d91space;
給新用戶分配權限
- 授權連接數據庫的權限:grant connect to d91;
- 授予操作資源的權限(可以創建對象、刪除對象、增刪改查):grant resource to d91;
默認情況下,對數據庫執行增刪改操作,都需要提交以後,纔會真正保存到表空間中
- commit;
將數據庫的數據進行導出
- 在cmd模式下,執行exp(要執行該命令,要首先退出oracle---------exit)
- 輸入要導出哪一個用戶的數據
- 指定導出的文件位置,後綴名必須是: dmp
- 選擇導出當前用戶表空間下面的所有數據
將dmp文件的數據,導入到數據庫中
- 在cmd模式下,執行imp(要執行該命令,要首先退出oracle---------exit)
- 指定要將數據導入到哪一個用戶下(任意用戶名都可以)
- 整個導入過程中,只有一個地方需要更改: 導入整個導出文件,選擇yes
表空間的操作
- 查詢表空間:select tablespace_name from user_tablespaces;
- 創建表空間“create tablespace d91space datafile 'd:/data/d91.dbf' size 50m autoextend on next 20m;
- 刪除表空間:切記:不能直接刪除dbf文件,如果直接刪除這個文件,oracle數據庫將無法登錄
刪除步驟:
- 用語法刪除表空間:drop tablespace d91space; -----這種刪除方式,只能刪除沒有數據的表空間
- drop tablespace d91space including contents;-------這種方式可以刪除表空間及裏面的數據
- 再手動刪除dbf文件
用戶的操作
- 查看有哪些用戶:select username from all_users;
- 創建用戶:create user d91 identified by d91 default tablespace d91space;
- create user d92 identified by d92; //不指表空間,使用的是默認表空間
刪除用戶
- drop user d91;------------這種刪除方式,只能刪除沒有數據的用戶
- drop user d91 cascade;------------這種刪除,可以刪除用戶及其數據
修改用戶密碼
- alter user 用戶名 identified by 新密碼;
-----------------------------------------------------------------------------------------------------
如果操作數據庫時,在cmd窗口下寫語句,非常的不方便。所以,我們一般會使用一個第三方工具操作oracle
oracle第三方工具很多,使用最多的是: pl/sql (不用安裝,解壓縮即可)
注意:這個工具分爲:32位版與64位,不同操作系統要求的版本有所不同:
導出數據,也可以使用plsql導出、導入
---------------------------------------------------------------------------------------------------
使用java代碼,連接oracle:
- 注意:oracle數據庫服務器啓動後,會佔用兩個端口: 1521 與 8080
- 由於tomcat的默認端口也是8080,這個端口號會與oracle衝突,所以,建議更改tomcat的端口號
- 使用java代碼連接時,是連接1521端口
java連接oracle,mysql不同之處:
mysql:
- url: jdbc:mysql://localhost:3306/數據庫名稱
- Class.forName("com.mysql.jdbc.Driver");
oracle:
- url: jdbc:oracle:thin:@localhost:1521:數據庫名稱
- Class.forName("jdbc.oracle.driver.OracleDriver");
oracle中的數據類型,可以分爲五種類型:
數值類型
- int,float這些數值都可以正常使用,但oracle並不推薦使用這些類型
- oracle推薦使用的數值類型是: number
用法如下:
- id number(11)-----------------id類型爲數值類型,長度爲11個長度,只能包含整數
- salary number(11,2)-----------salary類型爲數值類型,有效位數11位,其中,小數點之後可以保留2位
- other number------------------other類型爲數值類型,長度爲38位,只能包含整數
字符類型
- varchar,char 這些字符類型可以正常使用,但oracle中不推薦使用varchar
- oracle中推薦使用的字符類型是: varchar2,char(varchar2與varchar原理一樣)
- 在數據庫中,一個漢字佔3個字節長度
日期類型
- oracle中推薦使用日期類型是date
date類型,既可以包含:年月日,也可以包含時分秒
注意
如下添加date類型的數據方式是錯誤的:insert into test3 values(1,'jack','2010-10-20');
正確添加方式:
- insert into test3 values(1,'jack',date'2010-10-20');
- insert into test3 values(2,'andy',sysdate);
- 如果要添加指定數據的日期包含有時分秒,需要用函數轉換: to_date()
大對象類型
特點:存儲容量特別大,一個字段最多可存儲:4GB的容量
推薦使用: CLOB、BLOB
- CLOB:文本大對象(大容量的文本)
- BLOB:二進制大對象 (存儲的數據,以二進制的方式進行存儲)---BLOB的數據,一般是通過程序來進行錄入
僞列類型
僞列,本身並不存在,它需要根據查詢的結果動態產生
- rowid:它用於描述,當前這一行數據,在oracle中的存儲位置
- rownum: 它用於給查詢到的結果,生成一組連續序號(序號一定是從1開始排序)
- 數據如果刪除,序號依然連續
注意:在oracle中,要查詢前幾條數據,或者是要進行分頁顯示,必須要使用rownum
- 在sqlserver查詢前2條數據,語句是:select top 2 * from 表
- 在mysql中,查詢前2條數據,語句是:select * from 表 limit 0,2
- 在oracle中,查詢前2條數據,語句是:select * from 表 where rownum<=2;
mysql中的uuid
注意:在實際應用中,一般很少使用int類型作爲主鍵,開發中,更多時候是使用uuid作爲主鍵在mysql中,uuid是一個32位長度的隨機字符串+ 4根橫線 = 36位
CREATE TABLE test1
(
id VARCHAR(36) PRIMARY KEY,
NAME VARCHAR(20),
score INT
)
INSERT INTO test1 VALUES(UUID(),'jack',99);
INSERT INTO test1 VALUES(UUID(),'andy',89);
INSERT INTO test1 VALUES(UUID(),'chris',80);
create table test2
(
id number(11) primary key,
name varchar2(20),
photo blob --照片,類型是一個二進制大對象
)
select * from inf;
select * from test2;
select id,name,score,rowid from inf;
oracle中的uuid
create table test3
(
id varchar2(32) primary key,
name varchar2(20),
score number(11)
)
insert into test3 values(sys_guid(),'jack',100);
insert into test3 values(sys_guid(),'andy',60);
insert into test3 values(sys_guid(),'chris',80);
insert into test3 values(sys_guid(),'bruce',93);
數據完整性
目的:保證數據表中的數據是準確的、有效的。每一條數據都可以被唯一的標識出來.
要保證數據的完整性,可以通過約束來實現
數據完整性,包含三個方面的完整性:
實體完整性
實體完整性,可以保證數據表中的每一條記錄,可以被唯一的標識出來(當前字段的值,不允許出現重複值)
通過下列約束,可以保證實體完整
主鍵約束 primary key
特點:
- 如果當前列,被標識爲主鍵列,它的值必須唯一,不允許出現重複值
- 數據表中的主鍵,可以被外鍵表引用
唯一約束 unique
特點:如果當前列,加入唯一約束,它的值必須唯一,不允許出現重複值
域完整性
域完整性,它是爲保證數據表中的值,準確、有效
通過下列約束,可以實現域完整性:
- 非空約束 not null
- 默認值約束 default
- 檢查約束 check
注意:mysql有檢查約束,但是執行過程中,系統會忽略
在sqlserver和oracle中,檢查約束會起作用
檢查約束
- score number(11) check (score between 0 and 100)
- age number(11) check (age between 1 and 120)
- gender char(3) check (gender='男' or gender='女'),
檢查約束還可以判斷,數據是否滿足某一種數據格式(使用正則表達式進行驗證)
- tel varchar2(20) check (regexp_like(tel,'^1(3|5|7|8|9)[0-9]{9}$|^[0-9]{3}-[0-9]{8}$|^[0-9]{4}-[0-9]{7,8}$'))
程序:如果僅僅是前端驗證是可以繞過去的,如果僅僅後臺驗證,也可以繞過去
實際應用: 前端驗證+後臺驗證
在正則表達式中:
- ^:表達式的開始
- $:表達式的結束
數據庫中的正則表達式
- [0-9]--------表示1個數字
- [3-8]--------表示3-8之間的一個數字
- [0-9]{3}-----表示3位數字
- [0-9]{3,4}---表示3-4位數字
- (3|5|7|9)----表示3,5,7,9中的任意一個數字
- [a-z]--------表示一個小寫母
- [A-Z]--------表示一個大寫字母
- [a-z]{3}-----表示3個小寫字母
^1(3|5|7|8|9)[0-9]{9}$ 13123456789
^[0-9]{3}-[0-9]{8}$ 027-12345678
^[0-9]{4}-[0-9]{7,8}$ 0755-12345678 0710-1234567
引用完整性
目的:外鍵表引用的數據,在主鍵表中是存在的
通過下列約束,可以實現引用完整性:
外鍵約束 foreign key
mysql建立外鍵的語法:
CREATE TABLE city
(
cid INT PRIMARY KEY,
cname VARCHAR(20),
pid INT,
FOREIGN KEY (pid) REFERENCES province(pid) #創建外鍵
)
oracle建立外鍵的語法:
CREATE TABLE city
(
cid number(11) PRIMARY KEY,
cname VARCHAR2(20),
pid number,
FOREIGN KEY (pid) REFERENCES province(pid) --創建外鍵
)
或者是下面這種寫法:
CREATE TABLE city
(
cid number(11) PRIMARY KEY,
cname VARCHAR2(20),
pid number references province(pid)
)
在oracle中,創建約束有兩種方式:
方式1:創建表的時候,指定約束
create table student
(
sid number(11) primary key,--主鍵約束
sname varchar2(20) not null,--非空約束
gender char(3) check (gender='男' or gender='女'),--檢查約束
idCard char(18) unique,--唯一約束
className varchar(20) default 'D91', --默認值約束
city number(11) references city(cid) --外鍵約束
)
方式2:先建表,再添加約束
---修改表結構,添加約束
--修改tid,將類型改變number,同時添加主鍵約束
alter table teacher modify tid number(11) primary key
--將tname修改爲varchar2
alter table teacher modify tname varchar2(20)
--添加檢查約束
alter table teacher modify gender char(3) check(gender='男' or gender='女');
--添加新字段
alter table teacher add age number(11) check (age between 1 and 120)
--刪除字段
alter table teacher drop column other;
--添加電話號碼並且設置檢查約束
alter table teacher add tel varchar2(20) check (regexp_like(tel,'^1(3|5|7|8|9)[0-9]{9}$|^[0-9]{3}-[0-9]{8}$|^[0-9]{4}-[0-9]{7,8}$'));
---添加外鍵約束
alter table teacher add city number(11) references province(pid)