一:Oracle 關係型數據庫(ORM)分佈式集羣數據庫;
二:Oracle 8i--> Oracle 9i l=internet(網絡)
三:Oracle11G --> Oracle10g = grid (網絡,雲計算--虛擬化技術)2002
四:Oracle 作爲一個數據庫, DB2數據庫 -IBM
索引技術 存儲過程技術 PLSQL 編程技術 ;
五:Oracle 數據庫:關係型數據庫 , 集羣分佈式數據庫 , 福布斯100家公司98家都在使用 ,
六:Oracle 的標準開發:
1:Oracle 數據庫 安裝好了 Oracle-OraDb10g_home1
2:Oracle 實例 創建了 orcl;
3:創建自己的表空間 用來進行數據的存儲沒有;
4:創建自己的用戶 操作自己的表空間 沒有;
七:數據操作方面:(根據業務的不同在 業務層處理業務;)
數據操作方面在 ,業務上一般都會有 權限設置; 因爲一些數據 是 特定的;
1:添加
添加一般就是 新增數據 ;注意添加的數據類型;
主鍵 一般設在 不關係業務邏輯的列上, 一般爲 id ,因爲唯一標識;
2:刪除
刪除一般就是根據 指定 id 刪除, 如果是 對刪除一般都是 id放在一個集合裏 去循環依次刪除;
刪除在 業務裏面是一個 ,一般爲 注意項;因爲不會真正刪除 用戶,只是給 用戶 換了一個狀態,查詢時
不體現它,特定 條件 查詢在 體現其用戶 ;
3:更新
更新 ,也就是 修改數據 ,在你修改數據的 時候,注意 :要把你修改的 對象數據全部 查詢出來,在把 你想 修改的 數據,覆蓋掉原來的數據; 不查詢全部的話,跟新保存時 會出現只有你 修改的有值,其他的都 null
修改 一般就是 ,回顯數據,修改,保存;
4:查詢
根據指定 id,查詢;
八:Oracle 數據庫sql語句:
1: sql:結構化查詢語言,簡稱sql。
結構化查詢語言是一種數據庫查詢和程序設計語言,
用於存儲數據以及查詢、更新和管理關係數據庫系統;
2:分爲:
a:DML(數據庫操作語言):分別用於添加、修改和刪除表中的行。也成爲動作查詢語句;
b:DDL(數據庫定義語言):其語句包括動詞CREATE 和 DROP。在數據庫中創建新表或刪除表,
爲表加入索引等。DDL包括許多與人數據庫目錄中獲得數據有關的保留字,
它也是動作查詢的一部分;
c:DCL(數據庫控制語言):他的語句通過 GRANT 和 REVOKE 獲得許可,確定當個用戶和用戶組對數據庫對 象的訪問。
某些 RDBMS 可用 GRANT 或 REVOKE 控制對錶單個例的訪問;
九:Oracle 多表查詢 、 連接查詢 :
1:最基礎的多表查詢:
select * from 表一,表二 ;
多表查詢的條數顯示格式爲:表一條數 * 表二條數 ;
2:多表查詢中的笛卡爾積問題?
更好的做到保證數據完整,但這也促使很多數據 冗餘、重複;
利用連接條件的限定 主外鍵關聯 來解決笛卡爾積問題;
3:如果表太多的話,怎麼辦 表名太多、亂、繁瑣 ?
使用內連接查詢:(內連接的時候,靠的是主外鍵關聯, 外建表收集外鍵信息,
收集好了之在與主鍵表關聯)
a:內連接查詢特點:內連接查詢中,外鍵的字段值必須是出現在兩張表;
是連接查詢裏查詢最快的;
例子:
select * from EMP E
inner join DEPT D ON E.DEPTNO =D.DEPTNO
WHERE D.DEPTNO=10 AND LOWER(E.ENAME) LIKE 's%'
4:外連接查詢:( 主 次 ):爲保證連接的兩張表中某一張表的數據完整;
a:左外連接:(left join)保證左表完整 如果右表沒有與之匹配數據以NULL填充;
-- 查詢所有部門:
select * from dept d left join emp e on d.deptno=e.deptno
-
b:右外連接:(right join)它正好與左外連接相反:
select * from emp e right join DEPT D on e.deptno=D.deptno;
注意 : 由外鏈接嚐嚐會出現左表數據爲NULL的情況,這樣通常第一列
又是一張表的主鍵,所以這樣會破壞主鍵上的索引,查詢會很慢
經驗 : 所有的右連接都能以左連接代替.能用左連接不用右連接
能用內連接,不用外連接;
十:子查詢:
-- 查詢比員工7654工資高和員工7788從事一樣工作的人
select ename from emp e where
sal >( select sal from emp e where e.empno=7654)
and
-job =( select job from emp e where e.empno=7788)
十一:連接公式:
select * from 外鍵表 外
內連接/外連接 join 主鍵表 主 on 外.外鍵 = 主.主鍵 ;
注意:一般用內連接,兩個表中有一個表中的列與另一個表中的列對應不上爲空,
那麼用外連接,外連接一般都用左外連接;
1:外連接分爲:左外連接:
右外連接:
十二:自關聯:
把一張表在關聯的時候,起了兩個別名,模擬兩張表進行了一個連接查詢,這種形式叫做自關聯查詢;
Oracle 存取 數據:
數據存在哪裏?
Oracle 數據文件 很多 並且很分散
system 能創建表空間 ,相當於我們 mysql 中的 root
1:創建表空間
CREATE tablespace 表空間名;
2:指定表空間位置
datafile '指定空間位置'(不建議放在c盤)
3:指定表空間大小
size 30m (30照)
4:關閉自動增長
autoextend off;(關閉自動增長 )
5:創建自己的普通用戶:
create user 用戶名;
Oracle當中用戶分爲 2類:
a:普通用戶:創建表 增、刪、改、查 像scott用戶
b:管理員用戶:system(數據方面的管理) sys(運維方面的管理)
我們一般不用sys ,用它只是改 system密碼,sys 使用一般很危險;誤刪除表;
6:指定密碼:
identified by 密碼(一般爲 orcl);
7:指定操作的表空間:
default tablespace 綁定的表空間名字;
8:給新用戶賦予權限:
-- connect 角色 登錄角色權限;
-- resource 更爲 正式角色 開發角色:
grant connect,resource to 角色;
創建表:(切記不要看錯你當前的用戶)
1:登錄到自己的用戶上,創建表:
create table 表名(
列名 1
列名 2
列名 3
。。。。
)
刪除表: drop table 表名;
面試題:刪除整表的時候,那種方式比較快?第二種快;
a:delete from 表名;慢 安全 帶事務 ;可以刪除單條數;delete 面對的是 表數據;
-- 這種刪除在刪除的時候帶事務刪除,刪除之前要備份一下你的數據,因爲有回滾;
b:truncate table 表名;快 危險 不帶事務 ;不可以刪除單條數據,truncate 面對的是表結構;
-- 這種刪除在刪除的時候,沒有帶事務,一旦刪除,沒有回滾;
-- 他的刪除方式爲:先把你的數據文件中數據都刪掉,在根據你的表結構創建回來;
2: Oracle 裏的數據類型:
varchar2(size) :可變長字符數據;
char(size) :定長字符數據 ;
number(p,s) :可變長數值數據;(java中也有number,所有數字類型的父類就是 number)
表示存儲 數字(整數、小數)
p: 有效位數;(去掉負號和小數點 從左開始數)
s: 代表保留幾位小數;
date :日期型數據類型
時、分、秒 也是這個;
LONG : 可變長字符數據,最大可達到2 G;
clob : 字符數據,最大可達 4 G;
raw and LONG RAW :原始的二進制數據;
blob : 二進制數據,最大可達到 4 G;
bfile :存儲外部文件的二進制數據,最大可達到 4 G;
rowid :行地址 ;
、
注意:編程語言中的統一數據類型
數據類型一共分爲四類:(就像人的一生,)
-- 出生
1:數值數據類型 (java 中一般其實是分爲兩種:數值數據類型和非數值數據類型)
-- 大一點
2;字符數據類型
-- 小學
3:時間和日期數據類型
-- 中學 高中 大學 成人
4:文件數據類型 (聲音 圖片 視頻)--> 二進制數據類型
創建完表之後,操作表:
1: 添加數據:
insert into 表名
(第一個括號裏面寫你要添加的列名;例如:pid、name、。。)
values
(第二個括號裏面寫,對應第一個括號的列名要添加的數據;);
2: 在執行這種增 刪 改 的時候得事務:
-- 提交:
commit;
-- 回滾事務:
ROLLBACK;
3 :更新語句:
update 表名 set 修改的列名= 要修改的內容,......
where rowid ='你要修改的記錄的id'
4: 獲取rowid : select rowid,別名 . * from 表名 別名;
5: 刪除數據:(根據指定 id,id相同用 rowid 刪除);
delete from 表名 where pid/rowid ;
6: Oracle 事務操作:
Oracle 事務操作 增、刪、改 必須顯示 提交或回滾 ;
事務隔離級別:1 2 4 8 數據 : 髒讀 、幻讀、虛讀、不可重複讀 ;
事務的四大特性: 原子性 一致性 隔離性 持久性 ;
一旦增刪改,不提交事務,當你退出登錄,在登錄跟沒操作之前一樣;
Oracle 數據庫有一個事務特性:事務點:如果那條數據你只想添加指定的幾條的話,就在那你想添加的條數後面加上一個事務點,
SAVEPOINT a;然後在你不想要的條數後面 ROLLBACK TO SAVEPOINT a; 在提交事務 commit;
你不想添加的 數據就不會去添加;
a:Oracle 中事務隔離級別與隔離性:
1):讀未提交數據:
允許事務讀取未被其他事務提交的變更,髒讀、不可重複讀和幻讀的問題都會出現;
2):讀已提交數據:
只允許事務讀取已經被其他提交的變更,可以避免髒讀,但不可重複讀和幻讀問題任然可能出現;
3):可重複讀:
確保實物可以多次從一個字段中讀取相同的值,在這個事務持續期間,禁止其他事務對這個字段進行
更新,可以避免髒讀和不可重複讀,但幻讀的問題仍然存在;
4):串行化:
確保事務可以從一個表中相同的行,在這個事務持續期間,禁止其他事務對該表插入、更新和刪除操作,
所有併發問題都可以避免,但性能十分低下;
Oracle 支持的3種事務隔離級別:讀未提交數據 、串行化、READ ONLY;
Oracle 默認事務隔離級別爲:讀已提交數據;
7: Oracle 數據約束:
1):我們爲什麼使用約束?
使用約束可以更好的保證數據的完整性;
2):在 Oracle 數據庫中,約束的類型包括:
a:主鍵約束(Primary Key)
b:非控約束(Not Null)
c:唯一約束(Unique)
d:外鍵約束(Foreign Key)
e:檢查性約束(Check)
3):主鍵約束: 主鍵約束(Primary Key)
一個表只有一個主鍵約束,主鍵約束不可重複,
主鍵約束一般設在無關有業務邏輯的列上,一般設爲 id列;
a:例子:建表是直接添加 ;
pid number(10) primary key;
b:表鍵成之後添加主鍵約束:
alter table 表名 add constraint 起一個名 primary key (pid);
Oracle PL/SQL 編程語言:
1: 假如 A 公司 是 mysql 數據庫,B 公司是 Oracle 數據庫,他們的數據交互,表結構不一樣;
這是就用到了 數據遷移技術;
這就用到了 PL/SQL ,PL/SQL 具有一定的業務邏輯;
2:解決 PL/SQL 報錯問題:
PL/SQL 也有着非常豐富的異常處理機制;
1):預定義異常: