1. 程式人生 > 其它 >Oracle資料庫(一)概述、基礎與簡單操作

Oracle資料庫(一)概述、基礎與簡單操作

資料庫:

資料庫(Database)是按照資料結構來組織、儲存和管理資料的倉庫。

資料庫分類:

  關係型資料庫

  非關係型資料庫

資料庫 型別

特性

優點

缺點

關係型資料庫 SQLite、Oracle、mysql

1、關係型資料庫,是指採用了關係模型來組織資料的資料庫; 2、關係型資料庫的最大特點就是事務的一致性; 3、簡單來說,關係模型指的就是二維表格模型, 而一個關係型資料庫就是由二維表及其之間的聯絡所組成的一個數據組織。

1、容易理解:二維表結構是非常貼近邏輯世界一個概念,關係模型相對網狀、層次等其他模型來說更容易理解; 2、使用方便:通用的SQL語言使得操作關係型資料庫非常方便; 3、易於維護:豐富的完整性(實體完整性、參照完整性和使用者定義的完整性)大大減低了資料冗餘和資料不一致的概率; 4、支援SQL,可用於複雜的查詢。

1、為了維護一致性所付出的巨大代價就是其讀寫效能比較差; 2、固定的表結構; 3、高併發讀寫需求; 4、海量資料的高效率讀寫;

非關係型資料庫 MongoDb、redis、HBase

1、使用鍵值對儲存資料; 2、分散式; 3、一般不支援ACID特性; 4、非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合。

1、無需經過sql層的解析,讀寫效能很高; 2、基於鍵值對,資料沒有耦合性,容易擴充套件; 3、儲存資料的格式:nosql的儲存格式是key,value形式、文件形式、圖片形式等等,文件形式、圖片形式等等,而關係型資料庫則只支援基礎型別。

1、不提供sql支援,學習和使用成本較高; 2、無事務處理,附加功能bi和報表等支援也不好;

Oracle的常見版本

  Oracle8、Oracle8i,i表示開始支援internet

  Oracle9i,8的穩定版

  Oracle10g,g表示Oracle開始基於網格計算

  Oracle11g,Oracle10g的穩定版

  Oracle12c,c表示雲端計算

Oracle使用者

  超級管理員 sys

  次級管理員 system

  普通使用者 scott

  大資料使用者 (例項方案資料庫) sh

Oracle基礎

表空間:

  Oracle資料庫對資料的管理是基於表空間的概念來的, 各種資料的以及儲存資料的優化, 實際上也是通過優化表空間來實現的

表空間分類:

永久表空間

  用來存放表的資料, 檢視, 儲存過程或者函式等需要永久儲存的物件的空間

臨時表空間

  用來存放查詢結果等臨時資料的空間

UNDO表空間

用於存放回滾資料, 已經刪除資料等物件的表空間

Oracle基礎資料型別

  字元型:字串

    char(最大2000)--->固定長度,

    nchar(最大1000, 支援unicode)--->固定長度

    varchar2(最大4000),

    nvarchar2(最大2000, 支援unicode)--->可變長度

    oracle中字串的表示使用單引號:'字串'

  數字型別:包括整數和小數

    number(有效數字, 總位數)---最大11;

    number

    number(8)

    number(5,2)---總位數5位, 小數點後2位

    ?float--->儲存二進位制型別的資料, 1-126位0.30103

  日期型別:時間

    date:取值範圍:公元前4712年1月1號---公元9999年12月31號, 可以直接精確到秒

    timestamp(時間戳: 更精確的資料, 可以精確到毫秒)

    其它型別:大文字, 檔案

    blob: 最大4g, 以二進位制的形式來存放資料

    clob: 最大4g, 以字串的形式存放

oracle運算子和表示式

  表示式類似於java, 可以是常量, 可以是變數, 也可以是表中的一個欄位

  算術運算子(+ - * / 注意這個地方沒有取餘的運算子, 取餘使用mod函式)

  比較運算子(> >= < <= = <>/!=)

  邏輯運算子(and or not)

  字串連線符(||)

sql語句四種類型:

  資料定義語言(ddl)、

  資料操作語言(dml)、

  資料控制語言(dcl)

  事務控制語言(tcl)。

data definition language(ddl)

ddl使我們有能力建立或刪除表格。也可以定義索引(鍵),規定表之間的連結,以及施加表間的約束。 create database - 建立新資料庫 alter database - 修改資料庫 create table - 建立新表 alter table - 變更(改變)資料庫表 drop table - 刪除表 create index - 建立索引(搜尋鍵) drop index - 刪除索引

data manipulation language(dml)

供使用者實現對資料的追加、刪除、更新、查詢等操作。 select - 從資料庫表中獲取資料 update - 更新資料庫表中的資料 delete - 從資料庫表中刪除資料 insert into - 向資料庫表中插入資料

data control language(dcl)

grant - 授權 revoke - 撤銷授權 deny - 拒絕授權

transaction control language(tcl)

savepoint - 設定儲存點 rollback - 回滾 commit - 提交

oracle資料庫約束:

定義規則 定義要輸入的這個值是一個什麼樣的值, 或者是哪個範圍內的值

作用: 確保完整性, 確保精確性

  1, 非空約束 記錄一條資訊的時候如果使用者名稱和密碼沒有被記錄, 那麼這條記錄是沒有實際意義的, 建立表的時候預設是可以為空的   2, 主鍵約束 確保表中每一行的資料的唯一性 非空, 唯一 一個表中只能有一個主鍵, 但是這個主鍵可以由多個欄位(聯合主鍵, 複合主鍵)來構成 可以在建表的時候寫上設定為主鍵的關鍵字, primary key 或者寫個表前約束設定 constraint 主鍵名稱 primary key(欄位名1, 欄位名2)

  3, 外來鍵約束 唯一一個涉及兩個表中的欄位約束 插入資料的時候, 從表中的關聯關係的欄位, 要麼是一個主表主鍵的關聯, 要麼是一個空值

  4, 唯一約束(unique) 保證欄位值的唯一性 與主鍵的區別: 唯一約束可以為空值, 唯一約束可以有多個 使用語句建立唯一約束只能寫多條語句, 類似於insert into   5, 檢查約束 作用: 使表當中的值更具有實際意義 比如定義一個值的範圍 checks(sno>0 and sno<1000)

常用關鍵字

insert into---插入資料 delete---刪除資料 update---更新一條資料 select---實際工作中儘量不要寫* where---給執行的語句加限制條件 in---在某個範圍內 like(%, _)---模糊查詢, %表示任意個字元, _表示單個字元 order by---(列名或者寫索引:1, 2) group by---按照某幾列分組 having---分組之後的過濾 case...when...---類似於分支 set---設定某些屬性 distinct---去除重複 between...and(閉合區間, 即包括前面的數, 也包括後面的數) all---表示一個集合中所有的元素 any/some---表示一個集合中任意一個元素

通過SQLPLUS登入資料庫

  執行-sqlplus-使用者名稱-密碼

  即可連線到資料庫

使用plsql操作 

查詢

--查詢資料庫所有資訊
select t.*, t.rowid from P_DEPT t
select *, t.rowid from P_DEPT
--查詢資料庫中dname的值為SALES的資料的deptno資訊
select t.deptno from P_DEPT t where t.dname='SALES'

*代表所有

t代表給資料的一個別名,或者說id,在查詢較多時便於區分

t.rowid

where後面是查詢條件

增加

--增加資訊
insert into p_dept(deptno,dname,loc)
values (50,'ceshi','ceshi');
commit;
insert into p_dept
values (60,'ceshi','ceshi');
commit;
insert into p_dept(deptno)
values (70);
commit;

向表中增加資訊,注意:表明後面的列名要和values後面的值對應起來,也可以表名後面不寫列名,這樣在values後面就要寫全部的列的內容

更新 / 修改

--修改deptno為60的資料dname為ceshi2
update P_DEPT t set t.dname='ceshi2' where t.deptno=60

刪除資料

--刪除資料
delete from p_dept e where e.deptno=60;
commit;

Oracle資料庫常用命令整理:

--查詢當前系統中的所有使用者  
select * from all_users

--查當前使用者下所有的表:  
select * from tab where tname not like '%$%'

--檢視當前使用者下所有的表(詳細資訊)
select * from user_tables

--查資料庫中所有的表
select * from all_tables

--建立一個使用者(進行這項操作的當前使用者必須擁有DBA許可權)
create user 使用者名稱 identified by 密碼

--建立表空間
create tablespace ts_mytest
logging
datafile 'f:oracle_xe_datafilemytest.dbf'
size 32m
autoextend on next 10m maxsize unlimited

--刪除表空間
drop tablespace hoteldata including contents and datafiles;

/*
使用者分三種類型
  sys;//系統管理員,擁有最高許可權
  system;//本地管理員,次高許可權
  scott;//普通使用者,密碼預設為tiger,預設未解鎖
    新建使用者未授權全部為普通使用者
*/

--刪除使用者(級聯)
drop user testuser cascade

--授予該使用者許可權(進行這項操作的當前使用者必須擁有DBA許可權)
grant connect, resource to 使用者名稱

--connect角色是授予終端使用者的典型權利,最基本的
  --修改會話
    alter session
  --建立會話
    create session
  --建立聚簇
    create cluster
  --建立資料庫連結
    create database link
  --建立序列
    create sequence
  --建立同義詞
    create synonym
  --建立檢視
    create view

--resource角色是授予開發人員的
  --建立聚簇
    create cluster
  --建立儲存過程
    create procedure
  --建立序列
    create sequence
  --建表
    create table
  --建立觸發器
    create trigger
  --建立型別
    create type 

--修改使用者口令格式 
alter user 使用者名稱 identified by 密碼

--鎖定 / 解鎖oracle使用者
alter user 使用者名稱 account unlock
alter user 使用者名稱 account lock

--更改表的結構:
alter table 表名 modify(name char(10))

--查詢所有使用者預設表空間 
select username, default_tablespace from dba_users

--檢視某一個使用者使用了哪些表和表空間
select t.table_name, t.tablespace_name from dba_all_tables t where t.owner='COLLEGE'

--查詢當前使用者連線  
select count(*) from v$session

--檢視當前使用者許可權  
select * from session_privs; 

--新增主鍵
alter table test add constraint pk_test primary key (userid);

--刪除主鍵
alter table 表名 drop constraint 主鍵名

--檢視當前資料庫所有使用者
select * from dba_users

--新增外來鍵
alter table 表2 add constraint 外來鍵名 foreign key(表2中需要建外來鍵的欄位) references 表1

--刪除外來鍵
alter table test2 drop constraint fk_test2

--查詢某個時間點的資料(可以用於恢復資料, 但是如果刪除表中資訊用的truncate, 就無法查詢了)
select * from t_person as of timestamp to_date('2017-04-21 21:30:00','yyyy-mm-dd hh24:mi:ss');