MySQL相關介紹:
mariadb(mysql)
資料模型:層次模型、網狀模型、關系模型
關系模型:
二維關系:
表:row,column
索引:index
視圖:view
SQL接口:Structured Query Language
類似于OS的shell接口;也提供程式設計功能;
ANSI:SQL标準,SQL-86,SQL-89,SQL-92,SQL-99,SQL-03,…
DDL:Data Defined Language
CREATE ALTER DROP
DML:Data Manapulating Language
INSERT,DELETE,UPDATE,SELECT
程式設計接口:選擇、循環;
SQL代碼:
存儲過程:procedure
存儲函數:function
觸發器:trigger
時間排程器:event scheduler
使用者和權限:
使用者:使用者名和密碼;
權限:管理類、資料庫、表、字段
DBMS:DataBase Management System
RDBMS:Relational
MySQL:單程序,多線程
使用者連接配接:通過線程來實作;
線程池:
事務(Transaction):組織多個操作為一個整體,要麼全部都執行,要麼全部都不執行;
“復原”, rollback
一個存儲系統是否支援事務,測試标準:
ACID:
A:原子性;
C:一緻性;
I:隔離性;
D:持久性;
SQL接口:分析器和優化器
存儲引擎:
MySQL的指令行用戶端程式:mysql
-u:USERNAME
-h:HOST
-p:PASSWORD
mysql> GRANT ALL PROVILEGES ON db_name.tb1_name TO username@host IDENTIFIED BY ‘password’
資料庫的基本操作;
GREATE DATABASE db_name:建立資料庫
DROP DATABASE db_name:删除資料庫
補充材料:RDMBS設計範式基礎概念
設計關系資料庫時,遵從不同的規範要求,設計出合理的關系型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫備援越小。
目前關系資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫隻需滿足第三範式(3NF)就行了。
(1) 第一範式(1NF)
所謂第一範式(1NF)是指在關系模型中,對域添加的一個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,數組,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一範式(1NF)表中的每個域值隻能是實體的一個屬性或一個屬性的一部分。簡而言之,第一範式就是無重複的域。
說明:在任何一個關系資料庫中,第一範式(1NF)是對關系模式的設計基本要求,一般設計中都必須滿足第一範式(1NF)。不過有些關系模型中突破了1NF的限制,這種稱為非1NF的關系模型。換句話說,是否必須滿足1NF的最低要求,主要依賴于所使用的關系模型。
(2) 第二範式(2NF)
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個執行個體或記錄必須可以被唯一地區分。選取一個能區分每個實體的屬性或屬性組,作為實體的唯一辨別。
第二範式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實作區分通常需要為表加上一個列,以存儲各個執行個體的唯一辨別。簡而言之,第二範式就是在第一範式的基礎上屬性完全依賴于主鍵。
(3) 第三範式(3NF)
第三範式(3NF)是第二範式(2NF)的一個子集,即滿足第三範式(3NF)必須滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個關系中不能包含已在其它關系已包含的非主關鍵字資訊。簡而言之,第三範式就是屬性不依賴于其它非主屬性,也就是在滿足2NF的基礎上,任何非主屬性不得傳遞依賴于主屬性。
資料庫:資料集合;
表:為了滿足範式設計要求,講一個資料集拆分為多個;
限制:constraint,向資料表插入的資料要遵守的限制規則;
主鍵:一個或多個字段的組合,填入主鍵中的資料,必須不同于已存在的資料;不能為空;
外鍵:一個表中字段中能插入的資料,取決于另外一張表的主鍵中的資料;
唯一鍵:一個或多個字段的組合,填入唯一鍵中的資料,必須不同于已存在的資料;可以為空;檢查性限制;取決于表達式的請求;
索引:将表中的某一個或某些字段抽取出來,單獨将組織一個獨特的資料結構中;
常用的索引類型:
樹型:
hash:
注意:有助于讀請求,但不利于寫請求;
關系運算:
選擇:挑選出符合條件的行;
投影:挑選出符合條件的列;
連接配接:将多張表關聯起來;
資料抽象:
實體層:決定資料的存儲格式,即如何将資料組織為實體檔案;
邏輯層:描述DB存儲什麼資料,以及資料間存在什麼樣的關系;
視圖層:描述DB中的部分資料;
關系模型的分類:
關系模型
實體-關系模型
基于對象關系模型
半結構化關系模型;
網站:www.mariadb.org
Mariadb的特性:
插件式存儲引擎:存儲管理器有多種實作版本,彼此間的功能和特性可能略有差別;使用者可根據需要靈活選擇;
存儲引擎也稱為“表類型”;
1) 更多的存儲引擎;
MyISAM:不支援事務;
MyISAM --> Aria
InnoDB --> XtraDB:支援事務
2) 諸多擴充和新特性;
3) 提供了較多的測試元件;
4) Truly open sorce;
MySQL的發行機制:
Enterprise:提供了更豐富的功能;
Community:
安裝和使用MariaDB:
安裝方式:
1) rpm包:
a. 由OS的發行商提供;
b. 程式官方提供;
2) 源碼包:
3) 通用二進制格式的程式包;
示例:通過二進制格式安裝MariaDB:
準備資料目錄:
以/mydata/data目錄為例;
安裝配置mariadb;
#groupadd –r –g 306 mysql
#useradd –r –g 306 –u 306 mysql
#tar xf mariadb-VERSION.tar.xz -C /usr/local
#cd /usr/local
#ln –sv mariadb-VERSION mysql
#cd /usr/local/mysql
#chowm –R root:mysql ./*
#scripts/mysql_install_db --user=mysql –datadir=/mydata/data
#cp support-files/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld
提供配置檔案;
Ini格式的配置檔案:各程式均可通過此配置檔案擷取配置資訊:
[program_name]
OS Vendor提供mariadb rpm包安裝的服務的配置檔案查找次序:
/etc/mysql/my.cnf /etc/my.cnf --default-extra-file=/PATH/TO/CONF_FILE ~/.my.cnf
通過二進制格式安裝的伺服器程式其配置檔案查找次序;
/etc/my.cnf /etc/mysql/my.cnf --default-extra-file=/PATH/TO/CONF_FILE ~/.my.cnf
擷取其讀取次序的方法
mysqld --verbose --help
#cp support-files/my-large.cnf /etc/my.cnf
添加三個選項:
datadir = /mydata/data
inodb_file_per_table= ON
skip_name_resolve = ON
4. 啟動服務
#service mysqld start
示例,示範:
下載下傳解壓程式檔案至/usr/local目錄,并建立軟連接配接;

建立使用者組和相關目錄;
權限修改;
生成中繼資料庫;
擷取幫助:
指明使用者位置和資料庫目錄建立中繼資料庫:
複制運作腳本,并将其加入服務清單中;
複制配置檔案并編輯添加一下三行;
複制檔案;
編輯配置檔案;
啟動服務;
進入mysql;
MariaDB的基礎(2)
MariaDB程式的組成:
C:Client
mysql:CLI互動式用戶端程式;
mysqldump:備份工具;
mysqladmin:管理工具:
mysqlbinlog:
…
S:Server
mysqld
mysqld_safe:建議運作服務端程式;
mysqld_multi:多執行個體;
指令行互動式用戶端程式:mysql
mysql
mysql [OPTIONS] [database]
常用選項:
-uUSERNAME:使用者名,預設為root;
-hHOST:遠端主機(mysql伺服器)位址,預設為localhost
-p[PASSWORD]:USERNAME所表示的使用者的密碼; 預設為空;
注意:mysql的使用者賬号由兩部分組成:'USERNAME'@'HOST'; 其中HOST用于限制此使用者可通過哪些遠端主機連接配接目前的mysql服務;
HOST的表示方式,支援使用通配符:
%:比對任意長度的任意字元;
192.168.19.%, 172.16.19.0/16
_:比對任意單個字元;
-Ddb_name:連接配接到伺服器端之後,設定其處指明的資料庫為預設資料庫;
-e ‘SQL COMMAND;’:連接配接至伺服器并讓其執行此指令後直接傳回;
指令:
用戶端指令:本地執行
mysql> help
\u db_name:設定那個庫為預設資料庫;
\q:退出;
\d CHAR:設定新的語句結束符;
\g:語句結束标記;
\G:語句結束标記,結果豎排方式顯示;
\s:顯示伺服器端狀态資訊;
服務端指令:通過mysql連接配接發往伺服器執行并取回結果;
DDL,DML,DCL
Note:每個語句必須有語句結束符,預設為分号(;)
資料類型:
表:行和列
建立表:定義表中的字段;
定義表中的字段時,關鍵的一步即為确定其資料類型;
用于确定:資料存儲格式、能參與運算種類、可表示的有效的資料範圍;
字元型:字元集;
碼表:在字元和二進制數字之間建立映射關系;
種類:
字元型:
定長字元型:
CHAR(#):不區分字元大小寫
BINARY(#):區分字元大小寫;
變長字元型:
VARCHAR(#)
VARBINARY(#)
對象存儲:
TEXT
BLOB
内置類型:
SET
ENUM
數值型:
精确數值型:
INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT)
近似數值型:
FLOAT:浮點型,單精度;
DOBULE:雙精度;
日期時間型:
日期型:DATE
時間型:TIME
日期時間型:DATETIME
時間戳:TIMESTAMP
年份:YEAR(2),YEAR(4)
資料類型修飾符:
UNSIGNED:無符号;
NOT NULL:非空;
DEFAULT value:預設值;
服務端指令:
DDL:資料定義語言,主要用于管理資料庫元件,例如表、索引、視圖、使用者、存儲過程
DML:資料操縱語言,主要用管理表中的資料,實作資料的增、删、改、查;
擷取指令幫助:
mysql > help KEYBOARD
資料庫管理:
建立:
CREATE { DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
檢視支援的所有的字元集:SHOW CHARACTER SET;
檢視支援的所有排序規則:SHOW COLLATION;
修改:
ALTER {DATABASE | SCHEMA } [db_name]
修改資料庫的預設字元集:
修改資料庫預設字元排序規則:
删除:
DROP {DATABASE | SCHEMA} [IF EXITS] db_name
檢視:
SHOW DATABASES LIKE ‘’;
NOTE:‘’裡為pattern,可用%或者_表示;
表管理:
CREATE TABLE [IF NOT EXISTS] tb1_name(create_defination)[table_options]
create_defination:
字段:col_name data_type
鍵:
PRIMARY KEY (col1,col2,…)
UNIQUE KEY(col1,col2,…)
FOREIGN KEY(column)
索引:
KEY|INDEX [index_name] (col1,col2…)
table_options:
ENGINE [=] ENGINE_NAME
建立資料表:
檢視資料可支援的所有存儲引擎類型:
mysql> SHOW ENGINES;
檢視表結構:
檢視某标的存儲引擎類型:
mysql> SHOW TABLES STATUS [LIKE ‘tb1_name’]
ALTER [ONLINE | OFFLINE ] [IGNORE] TABLE tb1_name [alter_specification [,alter_specification] …]
Alter_specification:
字段:
添加:ADD [COLUMN] col_name data_type [FIRST |AFTER col_name]
删除:DROP [COLUMN] col_name
CHANGE [COLUMN] old_col_name new_col_name column_definnition [FIRST|AFTER col_name]
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
添加:ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1,col2,…)
CREATE [UNIQUE|FULL TEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tb1_name (col1,col2,…)
DROP INDEX index_name ON tb1_name
DML: INSERT , DELETE, UPDATE , SELECT
INSERT INTO:
INSERT [INTO] tb1_name [(col1,…)] {VALUES|VALUE} (val1,…),(…),…
注意:
字元型:引号;
數值型:不能用引号;
SELECT:
1) SELECT * FROM tb1_name;
2) SELECT col1,col2,… FROM tb1_name;
顯示時,字段可以顯示為别名:
col_name AS col_alias
3) SELECT col1,…FROM tb1_name WHERE clause;
WHERE clause:用于指明挑選條件;
col_name 操作符 value:
age>30;
操作符(1):
,<,>=,<=,==,!= 組合條件: and or not 操作符(2): BETWEEN … AND … LIKE ‘PATTERN’ 通配符: %:任意長度的任意字元; _:任意單個字元; RLIKE ‘PATTERN’ 正規表達式對字元串做模式比對; IS NULL IS NOT NULL4) SELECT col1,…FROM tb1_name [WHERE clause] ORDER BY col_name,col_name2,… [ASC|DESC]; ASC:升序; DESC:降序;![]()
Linux自學筆記——MariaDB基礎 DELETE: DELETE FROM tb1_name [WHERE where_condition] [ORDER BY…] [LIMIT row_count] 1) DELETE FROM tbl_name WHERE where_condition 2) DELETE FROM tbl_name [ORDER BY ...] [LIMIT row_count]![]()
Linux自學筆記——MariaDB基礎 UPDATE UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1=value1 [,col_name2=value2]… [WHERE where_condition] [ORDER BY …] [LIMIT rowcount] 使用者賬号及權限管理: 使用者賬号:‘username’@ ‘host’ host:此使用者通路目前的mysql伺服器時,允許其通過哪些主機遠端建立連結; 表示方式:IP,網絡位址、主機名、通配符(%和) 禁止檢查主機名:my.cnf [mysqld]![]()
Linux自學筆記——MariaDB基礎 建立使用者賬号: CREATE USER ‘username’@’host’[IDENTIFIED BY ‘password’];![]()
Linux自學筆記——MariaDB基礎 删除使用者賬号: DROP USER ‘user’@‘host’ [,user@host]…![]()
Linux自學筆記——MariaDB基礎 檢視使用者:![]()
Linux自學筆記——MariaDB基礎 授權: 權限級别:管理權限、資料庫、表、字段、存儲曆程; GRANT priv_type ,… ON [object_type] db_name.tb1_name TO ‘user’@’’host’[IDENTIFIED BY ‘password’]; Priv_type: ALL [PRIVILEGES] db_name.tb1_name: .:所有庫的所有表; db_name.*指定庫的所有表; db_name.tbl_name:指定庫的特定表; db_name.routine_name:指定庫上的存儲過程或存儲函數; [object_type] TABLE FUNCTION PROCEDURE![]()
Linux自學筆記——MariaDB基礎 檢視指定使用者所獲得的授權: SHOW GRANTS FOR ‘user’@’host’; SHOW GRANTS FOR CURRENT_USER;![]()
Linux自學筆記——MariaDB基礎 回收權限: REVOKE priv_type,… ON db_name.tb1_name FROM ‘user’@’host’;![]()
Linux自學筆記——MariaDB基礎 Note:Mariadb服務程序啟動時,會讀取mysql庫的所有授權表至記憶體中; 1) GRANT 或REVOKE指令等執行的權限操作會儲存在表中,Mariadb此時一般會自動重讀授權表,權限修改會立即生效; 2) 其他方式實作的權限修改,要想生效,必須手動運作FLUSH PRICILEGES指令方可;、 加強mysql伺服器,在安裝完成後,運作mysql_secure_installion指令; 圖形管理元件: phpMyAdmin 運作于LAMP; Navicat Mysql-Front ToadForMySQL SQLyog 本文轉自 claude_liu 51CTO部落格,原文連結:http://blog.51cto.com/claude666/2043887,如需轉載請自行聯系原作者![]()
Linux自學筆記——MariaDB基礎