oracle概念
阿新 • • 發佈:2017-06-23
原子性 事務 ... 改變 font 另一個 files 專用 應用
事務隔離級別
01、DDL 數據定義語言 create alter drop truncate 02、DML 數據操作語言 insert delete update select 03、TCL 事務控制語言 commit rollback 04、DCL 數據控制語言 rovoke grantsql分類
A(Atomicity):原子性 一個事務是一個不個分割的工作單位,要麽所有的語句都執行成功, 要麽所有的語句都不執行。 C(Consistency):一致性 事務必須是是一個數據庫從一個一致性狀態變到另一個一致性狀態。 I(Isolation):隔離性 一個事務的執行不能被其他事務幹擾,在一個事務中添加修改的數據, 不能被另一個事務讀取或修改。 D(Durability):持久性 指一個事務提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。ACID
1 Read Uncommitted(讀取未提交內容) 2 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之為臟讀(Dirty Read)。 3 4 Read Committed(讀取提交內容)Oracle默認的級別 5 這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別也支持所謂的不可重復讀(Nonrepeatable Read),因為同一事務的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結果。6 7 Repeatable Read(可重讀) 8 這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在並發讀取數據時,會看到同樣的數據行。不過理論上,這會導致另一個棘手的問題:幻讀(Phantom Read)。簡單的說,幻讀指當用戶讀取某一範圍的數據行時,另一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的數據行時,會發現有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本並發控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。 9 10 Serializable(可串行化) 11 這是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。
數據庫設計(Database Design):針對用戶特定的需求,我們能夠創建最合適的數據庫模型,然後將數據有效的存儲! 數據庫涉及的內容:01、需求分析 02、概念結構設計 03、邏輯結構設計 04、物理結構的設計 05、數據庫的實施 06、數據庫的運行和維護 數據庫的三大範式: 01、確保每列的原子性:每一列的值都是不可再分的最小數據單元! 02、在滿足第一範式的前提下,確保列中的每列都和主鍵相關! 03、在滿足第二範式的前提下,確保每列都和主鍵有直接關系,而不是間接依賴! A>B B>C B依賴於A,C依賴於B,我們就說C間接依賴於A,這種關系我們稱之為:傳遞依賴。數據庫設計
1、建議不用“*”代替所有的列名 2、刪除所有的數據用TRUNCATE代替DELETE 3、用NOT EXISTS 代替 NOT IN 4、用EXISTS 代替 IN 5、用EXISTS 代替 DISTINCT 6、驅動表的選擇 6.1、from 後面靠右的那個表是驅動表(表都沒索引的情況) 6.2、再有索引的情況下,應該是沒索引的那張表是驅動表 6.3、驅動表要選擇小表(過濾後的數據量小) 7、where 子句的連接順序 7.1、過濾記錄越多的條件子句應放置到後面 7.2、表連接關系放在前面 8、索引-通過索引,執行效率更高 8.1、單列索引:就是一個列的索引 8.2、組合索引:就是多列索引 8.3、分區索引:基於分區表 8.4、B樹索引:普通索引 8.5、唯一索引:在索引裏面增加了唯一約束 8.6、反向鍵索引 8.7、位圖索引 8.8、函數索引 9、表分區 把表中數據劃分成若幹部分,並存儲在不同的位置 優點: 改善查詢性能 表更容易管理 便於備份和恢復 提高數據安全性 表分區種類 散列分區:根據hash值自動分配 列表分區:明確的指定列表 復合分區:上面幾種的復用 其他分區:例如外鍵分區sql優化
數據庫對象: 數據庫對象-模式對象 邏輯結構的集合,最基本的數據庫對象是表 同義詞 視圖 序列 索引-通過索引,執行效率更高DBLink 約束 觸發器 存儲過程 ... 數據庫對象-視圖 視圖View-虛擬的表 限制對表中的一組行為訪問 隱藏數據的復雜性 簡化了用戶的SQL 基表定義修改隔離 通過重命名列,從另一個角度提供了數據 DML操作的限制 只能對基表進行操作 註意權限問題 數據字典 靜態數據字典 dba_***:包含了數據庫擁有的所有對象和權限的信息 all_***:包含了用戶當前可以訪問的全部對象和權限的信息 user_***:包含了用戶擁有的對象的信息 常用的: select * from user_tables --用戶表 select * from user_tab_cols -- 表的列 select * from user_tab_comments; --查看表的註釋 select * from user_views; --所有的視圖 select * from user_sequences; --所有序列 select * from dba_data_files; --需要dba權限, 才可以查看所有用戶的tablespace以及其數據文件的存放位置 動態數據字典 v$** v$sqlarea --通過這個查看sql,優化sql v$session --通過這個查看當前都哪些用戶登錄連接著數據庫還可以看到實例 v$tablespace --查看表空間 v$database --查看數據庫 v$instance --查看實例 ... 數據庫對象-DBLink DBLink 訪問遠程數據庫(只讀權限) 創建步驟: 為遠程數據庫建立網絡服務名(Net Manager) 創建DBLink 註:一般的dblink都是公用的,所以使用system用戶創建DBLink即可 數據庫對象-同義詞 同義詞(Synoyms) 匿名,屏蔽對象的名字及其持有者 為用戶簡化SQL語句 不同數據庫之間通過DBLink訪問,建立同義詞 同一數據庫下不同用戶之間,建立同義詞 分類 公用 專用數據庫對象
oracle概念