一 mariadb簡介
MariaDB數(shù)據(jù)庫管理系統(tǒng)是MySQL的一個分支,主要由開源社區(qū)在維護型诚,采用GPL授權許可MariaDB的目的是完全兼容MySQL逢捺,包括API和命令行丧没,使之能輕松成為MySQL的代替品。在存儲引擎方面沼死,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB着逐。
MariaDB基于事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎意蛀,它使用了Percona的XtraDB耸别,InnoDB的變體
二 mariadb支持事務transaction
事務(Transaction):組織多個操作為一個整體,要么全部執(zhí)行县钥,要么全部不執(zhí)行秀姐。但是必須遵循ACID原則:A(原子性)C(一致性)I(隔離性)D(持久性)。
三 RDMBS設計范式基礎
設計關系數(shù)據(jù)庫時若贮,遵從不同的規(guī)范要求省有,設計出合理的關系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式谴麦,各種范式呈遞次規(guī)范蠢沿,越高的范式數(shù)據(jù)庫冗余越小。
目前關系數(shù)據(jù)庫有六種范式:第一范式(1NF)匾效、第二范式(2NF)舷蟀、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF野宜,又稱完美范式)碗殷。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎上進一步滿足更多規(guī)范要求的稱為第二范式(2NF)速缨,其余范式以次類推。一般說來代乃,數(shù)據(jù)庫只需滿足第三范式(3NF )即可旬牲。
- 1NF:每一列都是不可分割的基本數(shù)據(jù)項,同一列中不能有多個值搁吓,即實體中的某個屬性不能有多個值或者不能有重復的屬性原茅。除去同類型的字段,就是無重復的列
- 2NF:第二范式必須先滿足第一范式堕仔,要求表中的每個行必須可以被唯一地區(qū)分擂橘。通常為表加上一個列,以存儲各個實例的唯一標識PK摩骨。非PK的字段需要與整個PK有直接的相關性通贞。
- 3NF:滿足第三范式必須先滿足第二范式。第三范式要求一個數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關鍵字信息恼五,非PK的紫毒案件不能有從屬關系
四 約束
- 約束:constraint 昌罩,表中的數(shù)據(jù)要遵守的限制
- 主鍵:一個或多個字段的組合,填入的數(shù)據(jù)必須能在本表中唯一標識本行灾馒;必須提供數(shù)據(jù)茎用,即NOT NULL ,一個表只能存在一個
- 惟一鍵:一個或多個字段的組合睬罗,填入的數(shù)據(jù)必須能在本表中唯一標識本行轨功;允許為NULL ,一個表可以存在多個
- 外鍵:一個表中的某字段可填入的數(shù)據(jù)取決于另一個表的主鍵或唯一鍵已有的數(shù)據(jù)
- 檢查:字段值在一定范圍內(nèi)
五 索引
將表中的某一個或某些字段抽取出來容达,單獨將其組織到一個獨特的數(shù)據(jù)結構中
常用的索引類型:樹型 hash(只有使用MEMORY引擎的表才能使用)實現(xiàn)級別在存儲引擎,應該創(chuàng)建在經(jīng)常用作查詢條件的字段上古涧,索引有助于讀請求,但不利于寫請求
六 SQL語句
DDL: Data Defination Language
CREATE, DROP, ALTER
# 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
CHARACTER SET 'character set name'
COLLATE 'collate name'
# 刪除數(shù)據(jù)庫
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
DROP TABLE [IF EXISTS] tb_name花盐;
# 修改數(shù)據(jù)庫
ALTER TABLE 'tbl_name'
添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
刪除字段:drop
修改字段:
alter (默認值), change (字段名), modify
DML: Data Manipulation Language
INSERT, DELETE, UPDATE
# 插入數(shù)據(jù)
INSERT [INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} (val1,...),(...),...
# 刪除數(shù)據(jù)
DELETE FROM tbl_name [WHERE clause] [ORDER BY'col_name'[DESC]][LIMIT [m,]n];
# 更新數(shù)據(jù)
UPDATE tbl_name SET col1=val1, col2=val2, ...[WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];
DCL :Data Control Language
GRANT, REVOKE
# 授權
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];
# 回收授權
REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host
注意:MariaDB 服務進程啟動時會讀取mysql 庫中所有授權表至內(nèi)存
(1)GRANT或REVOKE等執(zhí)行權限操作會保存于系統(tǒng)表中蒿褂,MariaDB的服務進程通常會自動重讀授權表,使之生效
(2)對于不能夠或不能及時重讀授權表的命令卒暂,可手動讓MariaDB的服務進程重讀授權表:FLUSH PRIVILEGES;
DQL :Data Query Language
SELECT
# 數(shù)據(jù)提取 SELECTcol1,col2,...FROMtbl_name[WHEREclause][ORDERBY'col_name'[DESC]] [LIMIT [m,]n];
七 密碼問題
當你剛剛創(chuàng)建數(shù)據(jù)庫的時候有較大的安全漏洞啄栓,所以需要運行一個內(nèi)置命令mysql_secure_installation
按照提示給數(shù)據(jù)庫創(chuàng)建密碼,和刪除test.database(測試庫)刪除匿名用戶也祠,是否確定遠程登陸昙楚、是否刪除,最后一定要重新加載表的權限诈嘿。
忘記管理員密碼的解決辦法:
(1) 啟動mysqld進程時堪旧,使用--skip-grant-tables和--skip-networking選項削葱;
CentOS 7:mariadb.service
CentOS 6:/etc/init.d/mysqld
改完后,systemctl daemon-reload
(2) 通過UPDATE命令修改管理員密碼淳梦;
(3) 以正常方式啟動mysqld進程