(一)認識MySQL
mysql
MySQL數據庫是開放源代碼的關係型數據庫。目前,它能夠提供的功能有:支持sql語言、子查詢、存儲過程、觸發器、視圖、索引、事務、鎖、外鍵約束和影像複製等。程序員
同Oracle和SQLServer等大型數據庫系統同樣,MySql也是客戶/服務器系統而且是單進程多線程架構的數據庫。sql
MySql區別於其它數據庫系統的一個重要特色是支持插入式存儲引擎。數據庫
MySQL的優點是查詢,而不是事物處理,事務處理須要第三方引擎或工具如:InnoDB數據引擎。緩存
(二)關係型數據庫服務器
關係型數據庫簡單的能夠理解爲二維數據庫,表的格式就如Excel,有行有列。網絡
經常使用的關係數據庫有Oracle,SqlServer,Informix,MySql,SyBase等。數據結構
MySQL關係型數據庫劃分如下幾個部分:
多線程
1)數據庫(databases):用來存儲信息的倉庫,它們構造簡單,遵照必定的規則.架構
數據庫裏的數據集合都存放在數據庫表(tables)裏;
數據表由數據行(row)和數據列(column)構成;
一個數據行就是數據表裏的一條記錄(record);
記錄能夠包含多個信息項,數據表裏的每個數據列都對應一個信息項.
2)管理系統:用來對數據進行插入,檢索,修改,刪除等操做軟件.
3)關係:能夠理解爲一張二維表,每一個關係都具備一個關係名,就是一般說的表名。
元組:能夠理解爲二維表中的一行,在數據庫中常常被稱爲記錄。
屬性:能夠理解爲二維表中的一列,在數據庫中常常被稱爲字段。
域:屬性的取值範圍,也就是數據庫中某一列的取值限制。
關鍵字:一組能夠惟一標識元組的屬性。數據庫中常稱爲主鍵,由一個或多個列組成。
關係模式:指對關係的描述,其格式爲:關係名(屬性1,屬性2,…,屬性N)。在數據庫中一般稱爲表結構。
關係型數據庫的優勢:
1)關係型數據庫相比其餘模型的數據庫而言,有着如下優勢:
2)容易理解:二維表結構是很是貼近邏輯世界的一個概念,關係模型相對網狀、層次等其餘模型來講更容易理解。3)使用方便:通用的SQL語言使得操做關係型數據庫很是方便,程序員甚至於數據管理員能夠方便
4) 在邏輯層面操做數據庫,而徹底沒必要理解其底層實現。
5) 易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大下降了數據冗餘和數據不一致的機率。
關係型數據庫的缺點:
具體來講它並不擅長如下處理:
1) 大量數據的寫入處理
2)爲有數據更新的表作索引或表結構(schema)變動
3)字段不固定時應用
4)對簡單查詢須要快速返回結果的處理
(三)SQL語言
sql語言:簡稱結構化語言.
sql語言定義爲四種類型:
1)數據查詢語言DQL-Data Query Language SELECT (DQL):用來查詢數據庫信息,如:select,show
2)數據操縱語言DQL-Data Manipulation Language (DML):用來插入、修改、刪除、查詢,能夠修改數據庫中的數據,如:MAKE,INSERT, UPDATE, DELETE
3)數據定義語言DQL-Data Definition Language(DDL):用來創建數據庫、數據對象和定義其列。如: CREATE, ALTER, DROP
4)數據控制語言DQL-Data Control Language(DCL):用來控制數據庫組件的存取容許、存取權限等.如: COMMIT WORK, ROLLBACK WORK
(四)存儲引擎介紹:
什麼是存儲引擎,存儲引擎說白了就是如何存儲數據,如何爲存儲的數據創建索引和如何更新,查詢數據等技術的實現方法。由於在關係數據庫中數據的存儲是以表的形式存儲的,因此存儲引擎也能夠成爲表類型。
MySQL採用的是客戶/服務器體系結構。所以,當你使用MySQL的時候,你實際是在使用兩個程序。第一個程序是MySQL服務器程序,指的是mysqld程序,它運行在存放着你的數據庫的機器上。它負責在網絡上監聽並處理來自客戶的服務請求,根據這些請求去訪問數據庫的內容,再把有關信息回傳給客戶。另外一個程序是MySQL客戶程序,它們負責鏈接到數據庫服務器,並經過向服務器發出查詢命令來告知它們須要哪些信息。
MySQL與mysql的區別
爲避免混淆,請注意,MySQL指的是一個完整的MySQL RDBMS,而mysql則是一個特定的客戶程序的名字。它們的發音相同,但表明的倒是不一樣的事物,因此本書要用大寫和小寫字母來區分它們。
瞭解MySql必須緊緊記住其體系結構圖,Mysql是由SQL接口,解析器,優化器,緩存,存儲引擎組成的
1 :Connectors指的是不一樣語言中與SQL的交互
2 :Management Serveices & Utilities:系統管理和控制工具
3: Connection Pool: 鏈接池。
管理緩衝用戶鏈接,線程處理等須要緩存的需求
4 :SQL Interface: SQL接口。
接受用戶的SQL命令,而且返回用戶須要查詢的結果。好比select from就是調用SQL Interface
5: Parser: 解析器。
SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的,是一個很長的腳本。
主要功能:
a . 將SQL語句分解成數據結構,並將這個結構傳遞到後續步驟,之後SQL語句的傳遞和處理就是基於這個結構的
b. 若是在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的
6 :Optimizer: 查詢優化器。
SQL語句在查詢以前會使用查詢優化器對查詢進行優化。他使用的是「選取-投影-聯接」策略進行查詢。
用一個例子就能夠理解: select uid,name from user where gender = 1;
這個select 查詢先根據where 語句進行選取,而不是先將表所有查詢出來之後再進行gender過濾
這個select查詢先根據uid和name進行屬性投影,而不是將屬性所有取出之後再進行過濾
將這兩個查詢條件聯接起來生成最終查詢結果
7 :Cache和Buffer:查詢緩存。
若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據。
這個緩存機制是由一系列小緩存組成的。好比表緩存,記錄緩存,key緩存,權限緩存等
8 :Engine :存儲引擎。
存儲引擎是MySql中具體的與文件打交道的子系統。也是Mysql最具備特點的一個地方。
Mysql的存儲引擎是插件式的。它根據MySql AB公司提供的文件訪問層的一個抽象接口來定製一種文件訪問機制(這種訪問機制就叫存儲引擎)
如今有不少種存儲引擎,各個存儲引擎的優點各不同,最經常使用的MyISAM,InnoDB,BDB
默認下MySql是使用MyISAM引擎,它查詢速度快,有較好的索引優化和數據壓縮技術。可是它不支持事務。
InnoDB支持事務,而且提供行級的鎖定,應用也至關普遍。
Mysql也支持本身定製存儲引擎,甚至一個庫中不一樣的表使用不一樣的存儲引擎,這些都是容許的。