MySQL系列:MySQL關係型數據庫架構

1、RDBMS關係型數據庫管理系統概述
mysql

 1.RDBMS概念算法

      RDBMS:關係型數據庫管理系統是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。現實世界中的各類實體以及實體之間的各類聯繫均用關係模型來表示。通常爲C/S架構,經過專有協議交互。sql

            關係模型表(行,列)組成的而爲結構,稱爲二維關係shell

關係模型的分類:關係模型實體-關係模型基於對象的關係模型半結構化關係模型數據庫

 

  2.範式編程

       範式是指設計時的規範,各類範式呈遞次規範,越高的範式數據庫冗餘越小。緩存

        目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式安全

        關係性數據庫最低須要知足第一範式(1NF)通常說來,數據庫只需知足第三範式(3NF)就好了。服務器

第一範式(1NF)session

全部的域都是原子性的,無重複的域

第二範式(2NF)

要求數據庫表中的每一個實例或記錄必須能夠被惟一地區分

第三範式(3NF)

任何非主屬性不得傳遞依賴於主屬性。

 

  3.SQLStructure QueryLanguage結構查詢語

            SQL接口:Structured Query Language相似於OS的shell接口;也提供編程功能;

            ANSI: SQL標準SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …

         據定義語言(Data Definition LanguageDDL、數據操做言(DataManipulation LanguageDML、數據控制言(Data Control LanguageDCL

 

  4.數據庫組成相關概念

    (1)相關術語

           表:爲了知足範式設計要求,將一個數據集分拆爲多個;

           視圖:虛表的概念

           約束:constraint,向數據表插入的數據要遵照的限制規則;

          主鍵:一個或多個字段的組合,填入主鍵中的數據,必須不一樣於已存在的數據;不能爲空;

          外鍵:一個表中某字段中能插入的數據,取決於另一張表的主鍵中的數據;

         唯一鍵:一個或多個字段的組合,填入唯一鍵中的數據,必須不一樣於已存在的數據;能夠爲空;

         檢查性約束:取決於表達式的要求;

           索引:將表中的某一個或某些字段抽取出來,單獨將其組織一個獨特的數據結構中;有助於讀請求,但不利於寫請求;

           事務(Transaction):組織多個操做爲一個總體,要麼所有都執行,要麼所有都不執行;

    (2)數據庫三層模型

   物理層:表如今物理設備上表空間

   邏輯層:數據庫內建的組件

   視圖層:用戶實際可以看見的相關信息

    (3)關係運算

    選擇:挑選出符合條件的行;

    投影:挑選出符合須要的列;

    鏈接:將多張表關聯起來;

 

 5.RDBMS解決方案:

         商業解決方案:Oracle, Sybase, Infomix, DB2

         開源解決方案:MySQL, MariaDB, PostgreSQL, SQLite

   補充

Mysql

開源、關係型、ISAM存儲引擎核心算法前身

Oracle

關係型數據庫管理系統,技術領先、大型企業

DB2

支持多媒體、WEB關係型數據庫

SQL server

微軟產品

PostgreSQL

惟一支持事務、子查詢、多版本並行控制系統、數據完整性檢查等特性自由軟件

 

 

 

2、MySQL基礎

 1.MySQL架構

        mysql單進程多線程模型每一個用戶鏈接都會建立對應的鏈接線程,支持長連接和短連接線程。其架構組件以下:

Connection  Pool

鏈接池(認證、線程重用、線程池鏈接上限、檢查內存、線程緩存...)

SQL  Interface

SQL解釋器(DMLDDL、支持過程式編程、代碼塊實現、視圖、詞法分析語法分析… ...)

Parser

分析器(查詢翻譯、用戶請求對象訪問權限檢測)

Optimzer

負責評估多條訪問路徑評估開銷,完成對查詢請求的優化,生成統計數據

Pluggable  Storage Engines

插件式存儲引擎:MyISAMInnoDBNDB… ...支持自編譯存儲引擎

引擎完後對磁盤路徑的轉換映射,加載至內存中給進程調用

Cacehs&Buffers

緩存緩衝組件

管理服務工具

備份恢復、安全、複製工具、集羣服務、管理配置、數據遷移… ...

MySQL數據文件類型:

       數據文件Data、索引文件Index

       重作日誌Redo、撤消日誌Undo、二進制日誌Binary、錯誤日誌Error、查詢日誌Query、慢查詢日誌Slow Query、(中繼日誌)

wKiom1bsAX6DDLN6AASK1UI0tbg002.png

 

  2.監聽套接字地址

方式一:監聽在IPv4地址的3306/tcp端口

方式二:Unix Sock(客戶端和服務端在同一臺主機C <--> S: localhost, 127.0.0.1)

       其套接字文件位置:/var/lib/mysql/mysql.sock(RPM包安裝), /tmp/mysql.sock(通用二進制、源碼編譯安裝)

 

  3.程序的組成

     (1)客戶端程序:

             mysql:CLI交互式客戶端程序;

             mysqldump:mysql數據備份工具;基於Mysql協議發起查詢請求並將查詢結果轉換成insert等寫操做語句保存在文件中

             mysqladmin:管理工具;基於Mysql協議可遠程鏈接管理

             mysqlbinlog:查看二進制日誌工具

             mysqlimport:數據導入工具

… ...

     (2)Server服務端

              mysqld

              mysqld_safe:建議運行服務端程序;線程安全的mysql

              mysqld_multi:多實例;

              myisamchk:檢查修復isam表

             myisampack: 打包存放myisam打包後只能實現查詢操做、只讀

… ...

  4.配置文件格式

mysql配置文件集中式的配置,可以爲mysql的各應用程序提供配置信息

[mysqld]專用於mydqld應用程序的配置信息

[mysqld_safe]線程安全mysql相關的配置信息

[mysqld_multi]多實例模型的mysql配置共享參數

[server]服務端

[mysql]專用於客戶端

[mysqldump]專用於數據備份導入導出配置段

[client]對客戶端都有效的配置

   注意:

       1) [mysqld]mysqld_safe][mysqld_multi]只會啓動一個

       2) 配置文件parameter = value,其中parameter有兩種風格(skip-name-resolveskip_name_resolve),建議在配置時同一風格

       3) 查找配置文件路徑以下,會一次遍歷查詢路徑:

            /etc/my.cnf--> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf -->--default-extra-file=/path/to/somedir/my.cnf --> ~/.my.cnf

 

  5.安裝後的設定:

       (1) 爲全部root用戶設定密碼(三種方法)

                mysql> SET PASSWORD即便生效

                mysql>update mysql.user SET password=PASSWORD('your_pass') WHERE cluase;

                              更新mysqluser表,該方案須要須要手動刷新受權表

                 #mysqlamin

        (2) 刪除全部匿名用戶

                    mysql>DROP USER ''@'localhost';

               上述兩步驟可運行命令:mysql_secure_installation

        (3)建議關閉主機名反解功能;

 

 

 

3、命令行工具:mysql

  1.mysql的使用模式:

        交互式模式(可運行命令有兩類)

    客戶端命令:\h,help

    服務器端命令:SQL,須要語句結束符;

        腳本模式:

#mysql -uUSERNAME -hHOST -pPASSWORD < /path/from/somefile.sql

mysql>source /path/from/somefile.sql

 

  2.mysql使用方法

       mysql [OPTIONS][database]

-u,  --user= 

用戶名,默認爲root;

-h,  --host=

遠程主機(即mysql服務器)地址,默認爲localhost;

-p,  --passowrd=

USERNAME所表示的用戶的密碼;  默認爲空;

-P,  --port=

指明連入服務器的端口

-S,  --socket=

套接字文件位置,客戶端服務端在同一主機上時候,-hlocalhost127.0.0.1

-D,  --database= 

鏈接到服務器端以後,設定其處指明的數據庫爲默認數據庫;

-C,  --compress        

輸入輸出時候是否壓縮

-e 'SQL COMMAND;'

不用進入交互模式,數據庫執行SQL語句,可在腳本中定義

   注意:

         1) mysql的用戶帳號由兩部分組成:'USERNAME'@'HOST';其中HOST用於限制此用戶可經過哪些遠程主機鏈接mysql

         2) HOST支持使用通配符:

        %:匹配任意長度的任意字符;172.16.%.%, 172.16.0.0/16

         _:匹配任意單個字符;

 

  3.客戶端命令:本地執行

直接在mysql客戶端命令行模式下輸入命令:

 help

顯示幫助信息

\u db_name

設定哪一個庫爲默認數據庫

\q

退出;

\d CHAR

設定新的語句結束符;

\g

語句結束標記;

\G

語句結束標記,結果豎排方式顯式;

\s:

顯示客戶端版本類型

    實例:mysql> \s

wKioL1bsAhDjJBrMAAE6wfoQjm4438.png

 

  4.服務端(mysqld)命令

        經過mysql鏈接發往服務器執行並取回結果;能夠支持DDL, DML, DCL

       注意:每一個語句必須有語句結束符,默認爲分號(;)

 

  5.經常使用的一些命令

      (1)獲取程序默認使用的配置:

    ~] # mysql --print-defaults  

    ~] # mysqld --print-defaults

      (2)獲取可用參數列表:mysqld--help --verbose

      (3)獲取運行中的mysql進程使用各服務器參數及其值:

mysql> SHOW GLOBAL VARIABLES;   全局配置,管理權限的用戶

mysql> SHOW [SESSION] VARIABLES;  會話配置

         注意:其中有些參數支持運行時修改,會當即生效;有些參數不支持,且只能經過修改配置文件,並重啓服務器程序生效;有些參數做用域是全局的,且不可改變;有些能夠爲每一個用戶提供單獨的設置;

      (4)修改服務器變量的值:mysql>help SET

全局:

mysql>SET GLOBAL system_var_name=value;

mysql>SET @@global.system_var_name=value;

會話:

mysql>SET [SESSION] system_var_name=value;

mysql>SET @@[session.]system_var_name=value;

      (5)狀態變量:用於保存mysqld運行中的統計數據的變量;

mysql> SHOW GLOBAL STATUS;       

mysql>SHOW [SESSION] STATUS;

      (6)查看支持字符集:mysql> SHOW CHARACTER SET;

      (7)查看支持的引擎:mysql> SHOW ENGINES ;

      (8)查看命令字符集和排序規則

mysql>SHOW CHARACTER SET;

mysql>SHOW COLLATION;

      (9)SQLMODE:定義mysqld對約束等的響應行爲

  修改方式:修改的是默認配置,僅對修改後新建立的會話有效;對已經創建的會話無效;

mysql>SET GLOBAL sql_mode='MODE';

mysql>SET @@global.sql_mode='MODE';

  只對當前會話生效

mysql>SET SESSION sql_mode='MODE';

mysql>SET @@session.sql_mode='MODE';

經常使用MODE(部分):TRADITIONAL STRICT_TRANS_TABLESSTRICT_ALL_TABLES  對於約束的響應級別不一樣

 

 

 

4、數據類型

  1.數據類型概念

         在建立表定義表中字段你是時候會肯定其數據類型,用於肯定數據存儲格式、能參與運算種類、可表示的有效的數據範圍

 

  2.數據類型種類

   (1)字符型:

CHAR, BINARY:定長數據類型;分配固定長度的內存空間

VARCHAR, VARBINARY:變長數據類型;須要結束符;這兩個區分在因而否區分字符大小寫

TEXT文本對象類別:TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT

BLOB對象存儲: TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB

ENUM, SET:內置類型

   (2)數值型:

精確數值型

整型數據:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

十進制型:DECIMAL

近似數值型:FLOATDOBULE

   (3)日期時間型:

日期型:DATE

時間型:TIME

日期時間型:DATETIME

時間戳:TIMESTAMP  于格林威治時間對比的秒數,相對時間計時法

年份:YEAR(2),YEAR(4)

 

  3.數據類型修飾符

    (1)字符類型修飾符

NOTNULL: 非空約束;

NULL:

DEFAULT'STRING': 指明默認值;

CHARACTER SET '':指明使用的字符集;

COLLATION:使用的排序規則

    (2)整型數據修飾型:

NOT NULL不容許爲空

NULL

DEFAULT NUMBER默認長度

    (3)AUTO_INCREMENT:

UNSIGNED無符號;字段數據類型的修飾符,緊跟在數據類型以後,不能跟在其餘修飾符以後,

PRIMARYKEY|UNIQUE KEY

NOTNULL

    (4)日期時間型修飾符:

NOT NULLNULLDEFAULT

    (5)內建類型SET和ENUM的修飾符:

NOT NULLNULLDEFAULT

相關文章
相關標籤/搜索