1、RDBMS關係型數據庫管理系統概述
mysql
1.RDBMS概念算法
RDBMS:關係型數據庫管理系統,是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。現實世界中的各類實體以及實體之間的各類聯繫均用關係模型來表示。通常爲C/S架構,經過專有協議交互。sql
關係模型是表(行,列)組成的而爲結構,稱爲二維關係shell
關係模型的分類:關係模型、實體-關係模型、基於對象的關係模型、半結構化關係模型數據庫
2.範式編程
範式是指設計時的規範,各類範式呈遞次規範,越高的範式數據庫冗餘越小。緩存
目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)安全
關係性數據庫最低須要知足第一範式(1NF),通常說來,數據庫只需知足第三範式(3NF)就好了。服務器
第一範式(1NF)session |
全部的域都是原子性的,無重複的域 |
第二範式(2NF) |
要求數據庫表中的每一個實例或記錄必須能夠被惟一地區分 |
第三範式(3NF) |
任何非主屬性不得傳遞依賴於主屬性。 |
3.SQL(Structure QueryLanguage)結構化查詢語言
SQL接口:Structured Query Language。相似於OS的shell接口;也提供編程功能;
ANSI: SQL標準,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
數據定義語言(Data Definition Language,DDL)、數據操做語言(DataManipulation Language,DML)、數據控制語言(Data Control Language,DCL)
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解釋器(DML、DDL、支持過程式編程、代碼塊實現、視圖、詞法分析語法分析… ...) |
Parser |
分析器(查詢翻譯、用戶請求對象訪問權限檢測) |
Optimzer |
負責評估多條訪問路徑評估開銷,完成對查詢請求的優化,生成統計數據 |
Pluggable Storage Engines |
插件式存儲引擎:MyISAM、InnoDB、NDB… ...支持自編譯存儲引擎 引擎完後對磁盤路徑的轉換映射,加載至內存中給進程調用 |
Cacehs&Buffers |
緩存緩衝組件 |
管理服務工具 |
備份恢復、安全、複製工具、集羣服務、管理配置、數據遷移… ... |
MySQL數據文件類型:
數據文件Data、索引文件Index
重作日誌Redo、撤消日誌Undo、二進制日誌Binary、錯誤日誌Error、查詢日誌Query、慢查詢日誌Slow Query、(中繼日誌)
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-resolve、skip_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;
更新mysql庫user表,該方案須要須要手動刷新受權表
#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= |
套接字文件位置,客戶端服務端在同一主機上時候,-h在localhost、127.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
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_TABLES、STRICT_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
近似數值型:FLOAT、DOBULE
(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 NULL、NULL、DEFAULT
(5)內建類型SET和ENUM的修飾符:
NOT NULL、NULL、DEFAULT