oracle數據庫01

馬果老師整理

 

問題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數據庫是否安裝好

  1. 進入cmd
  2. 輸入 sqlplus
  3. 分別輸入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,除了不能載、卸載數據庫裝,其他操作都可以

  1. 創建表空間、創建用戶、分配用戶權限
  2. 創建表、以及對數據進行增刪改的各種操作

角色3: normal (普通用戶),它的所有操作,都要經過授權纔可以
    
注意,我們一般使用的是:normal角色的用戶,之前的系統賬號system的角色類型爲: sysoper

oracle數據庫服務器的基本結構:

在oracle中,所有數據表、數據都是存放在表空間(tablespace)中,oracle中的表空間的概念,就相當於mysql
中database的概念

我們使用oracle都是使用普通用戶角色,所以,一般會首先創建一個普通用戶:
    
要創建用戶,必須有權限纔可以 (sysdba,sysoper),使用system它是操作員權限,可以創建用戶、創建表空間

@@@@@@@創建步驟:

先用system登錄,登錄方式有兩種:

  1. cmd--->sqlplus--->分別輸入用戶名、密碼
  2. 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;

將數據庫的數據進行導出

  1. 在cmd模式下,執行exp(要執行該命令,要首先退出oracle---------exit)
  2. 輸入要導出哪一個用戶的數據
  3. 指定導出的文件位置,後綴名必須是: dmp
  4. 選擇導出當前用戶表空間下面的所有數據

將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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章