常見的數據庫系統:php
1、甲骨文的Oraclemysql
2、IBM的DB2web
3、微軟的Access和 SQL Serversql
4、開源PostgreSQL數據庫
5、開源MySQL 緩存
mysql數據庫三階段:session
初期開源數據庫階段併發
sun mysql階段oracle
oracle mysql階段ide
OLTP:聯機事務處理,面向基本的、平常的事務處理。
OLAP:聯機分析處理,數據倉庫的主要應用。
mysql分支版本(一些):
MariaDB : Maria引擎室myisam存儲引擎的升級版本,增長了對Hash join的支持和Semi Join的優化,提升了查詢性能,適合OLAP。
Drizzle:適合雲計算組件和web應用的數據庫,高併發,高效的內存使用,開放源碼。
InnoSQL:一、InnoDB Flash Cache:將SSD做爲Flash Cache 二、InnoDB Share Memory :將Share Memory做爲InnoDB的共享內存,以此提升數據庫的預熱。三、IO Statistics:擴展了mysql原有的Slow log 的內容,如今可記錄某SQL語句的邏輯讀取和物理讀取的IO
存儲引擎(表類型):
InnoDB存儲引擎:支持事務、回滾,主要面向OLTP,支持行鎖設計、支持外鍵、支持相似Oracle的非鎖定讀。(mysql 5.5.8開始是默認存儲引擎)數據放在一個獨立的表空間、使用MVCC(多版本併發控制)、實現4種隔離級別,默認REPEATABLE級別、使用netx-key locking避免幻讀,還有插入緩衝、二次寫、自適應哈希索引、預讀等。採用彙集的方式,每張表都按主鍵的順序進行存儲。索引和數據是緊密捆綁的,沒有使用壓縮從而會形成INNODB比MYISAM體積龐大不小。
使用場合:在承載的大部分項目執行insert 和update的話,應該選擇InnoDB.
優點:在於提供了良好的事務管理、崩潰、修復能力和併發控制,
缺點:是其讀寫效率稍差,佔用的數據空間相對比較大.
Myisam存儲引擎:不支持事務,表鎖設計,支持全文索引,主要面向OLAP,在innodb之前是默認存儲引擎,它的緩衝池只緩存索引文件,而不緩存數據文件。索引和數據分開的,能夠加載更多的索引,而且索引是壓縮的,相對內存來講使用效率就提升很多,他使用一種表格鎖定的機制,來優化多個併發讀寫操做。MYISAM強調了快速讀取操做。
使用場合:在承載的大部分項目是讀多寫少的項目平臺中,而MyISAM的讀性能是比Innodb強很多的
優勢:佔用空間小,處理速度快,
缺點: 不支持事務日誌的完整性和併發性
NDB存儲引擎:集羣存儲引擎,相似於Oracle的RAC集羣(share everything),其結構是share nothing集羣結構。數據所有放在內存中,所以主鍵查找的速度極快,並能在線添加NDB存儲數據節點,面向OLTP。貌似mysql集羣企業應用很少,由於技術和穩定性都不太成熟。
Memory存儲引擎:數據所有放在內存,數據庫重啓或崩潰,表中數據消失,適合存儲OLTP應用臨時表,也能夠做爲OLAP數據庫應用的數據倉庫的維度表,默認使用hash索引而不是B+索引。
優勢:存儲速度快
缺點:缺少穩定性和完整性
Infobright存儲引擎:第三方存儲引擎,存儲按照列而非行的,故適合OLAP的數據庫應用
merge(mrg_myisam)存儲引擎:一組myisam表的組合, 這些myisam表必須結構徹底相同,使用merge表來透明地對多個表進行查詢和更新操做
NTSE存儲引擎:網易開發面向內部使用的,目前不支持壓縮、行級緩存等特性。
BDB: 源自Berkeley DB,事務型表的另外一種選擇
archive: 很是適合存儲大量獨立的、做爲歷史記錄的數據, 它們不常常被讀取, archive擁有高效的插入速度,但對查詢的支持相對較差
CSV: 邏輯上由逗號分割數據的存儲引擎
BlackHole: 黑洞引擎,寫入的任何數據都會消失,通常用於記錄binlog, 作複製的中繼。
mysql下查看存儲引擎:
(1)、查詢Mysql支持的引擎
Mysql->show engines;
Mysql->show engines\G; +G和不加G兩種不一樣的顯示方式。
(2)、查詢Mysql支持引擎的信息
Mysql->show variables like ‘have%’
(3)、查詢Mysql默認存儲引擎
Mysql-> show variables like'storage_engine';
若是想修改存儲引擎,能夠在my.ini中進行修改
Default-storage-engine=引擎類型
修改表的存儲引擎:
alter table t1 engine = innodb;
事務:
transaction(事務):
所謂事務是用戶定義的一個操做序列, 這些操做要麼全作要麼全不作, 是一個不可分割的工做單位
在MySQL中, 事務能夠是一條sql語句、一組sql語句或是整個程序
只有innodb、bdb存儲引擎支持事務
show engines\G
事務的4個特性(ACID)
Note: 注意engine
原子性(Atomicity):
原子意爲最小的粒子, 或者說不能再分的事物, 組成事務的全部語句要麼所有執行, 要麼所有取消
一致性(Consistency):
指數據在同一個事務中, 先後應保持一致
s1讀數據, s2也訪問同一數據, 且修改了它, s1再讀, 獲得的數據與剛纔不同了, 這就違反了一致性
(s1在事務中)
隔離性(Isolation):
commit前, 某個事務的操做對其餘session不可見
持久性(Durability):
當事務完成後, 其影響應該保留下來, 不能撤消
事務工做原理
若dml不在事務中, s1改了, s2立刻就能夠看到
若dml在事務中, commit前dml並無做用到表, 而是記錄在事務日誌文件中
因此其餘session看不到結果
commit時, 就將記錄在事務日誌f文件中的dml做用到表
當執行了commit或rollback後, 這個事務就結束了
鎖的介紹:
計算機協調多個進程或線程併發訪問某一資源的機制
除cpu/mem/hd外, 數據(或表、一行記錄)也是一種供多用戶共享、爭用的資源
MySQL提供了多用戶併發訪問數據的能力,不一樣的dbms均提供了併發控制功能, 不一樣的開發工具每每也提供了實現數據庫併發控制的命令
mysql常見的三種鎖級別——表級鎖、頁面鎖、行級鎖;其中表級鎖有兩種模式——表共享讀鎖和表獨佔寫鎖。
MyISAM:
表級鎖。對myisam表進行讀操做的時候,它不會阻塞其餘用戶對同一表的讀請求,但會阻塞對同一表的寫操做;
對myisam表進行寫操做的時候,它會阻塞其餘用戶對同一表的讀、寫請求.
innodb:
提供行鎖(locking on row level),另外,InnoDB表的行鎖也不是絕對的,若是在執行一個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表.
行級鎖的優勢以下:
1)當不少鏈接分別進行不一樣的查詢時減少LOCK狀態。
2)若是出現異常,能夠減小數據的丟失。由於一次能夠只回滾一行或者幾行少許的數據。
行級鎖的缺點以下:
1)比頁級鎖和表級鎖要佔用更多的內存。
2)進行查詢時比頁級鎖和表級鎖須要的I/O要多,因此咱們常常把行級鎖用在寫操做而不是讀操做。
3)容易出現死鎖。
注意:Innodb不能肯定操做的行,這個時候就使用的意向鎖,也就是表鎖
手動加鎖
lock tables emp read|write;
unlock tables;或quit均會釋放鎖
flush tables with read lock; -- 全部表加讀鎖
圖形化SQL查詢分析器:
MYSQL Workbench
Toad for Mysql
Imysql-Front
其餘相應工具:phpMyAdmin,navicat for mysql,mysqlQueryBrowser。