Mariadb数据库
Mariadb基礎
關系模型:
二維關系:表
行:row, entry
列:column, attribution
索引:數據結構,輔助完成數據查找的;
SQL代碼:
存儲過程
存儲函數
觸發器
事件調度器
事務(Transaction):組織多個操作為一個整體,要么全部都執行,要么全部都不執行;
'回滾操作' ,rollback
一個存儲系統是否支持事務,就看其是否滿足ACID測試:
A:原子性;
C:一致性;
I:隔離性;
D:持久性;
數據庫:數據集合:
表:為了滿足范式設計要求,將一個數據集分拆為多個
約束: constranint,向數據表插入的數據要遵循的限制規則
主鍵:primary key,
????????一個或多個字段的集合,填入主鍵中的數據,必須不同于已存在的數據,不能為空,一個表只能有一個主鍵;
外鍵:foreign key,
????????一個表中某字段中能插入的數據,取決于另外一張表的主鍵中的數據
唯一鍵:unique key,
????????一個或多個字段的組合,填入唯一鍵中的數據,必須不同于已存在的數據,可以為空,一個表可以存在多個惟一鍵
檢查性約束:check,取決于表達式的要求
索引:將表中的某一個或某些字段抽取出來,單獨將其組織一個獨特的數據結構中;
常見的索引類型:
????????樹型 :?BTree
????????hash :?k/v
注意:索引有助于請讀求,但不利于寫請求
關系運算:
選擇:挑選出符合條件的行;
投影:挑選出符合需要的列;
連接:將多張表關聯起來;
數據抽象:
物理層: 決定數據的存儲格式,即如何將數據組織成為物理文件
邏輯層: 描述DB存儲什么數據,以及數據間存在什么樣的關系
視圖層: 描述DB中的部分數據;
關系模型分類:
關系模型
實體-關系模型
基于對象的關系模型
半結構化關系模型
MySQL:
C/S架構
????????S:mysqld, mysqld_safe, mysqld_multi
????????C:mysql, mysqladmin, mysqldump, ...
非客戶端工具:工作于服務端主機,用于實現一些管理操作;
數據類型:
字符型:
????????定長字符型:
????????????????CHAR(#)
????????????????BINARY(#)
????????變長字符型:
????????????????VARCHAR(#)
????????????????VARBINARY(#)
內建數據類型:
????????ENUM
????????SET?
數值型:
????????精確數值:
????????????????整型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
????????近似數值:
????????????????浮點型:
????????????????FLOAT
????????????????DOUBLE
日期時間:
????????DATE:日期型
????????TIME:時間型
????????DATETIME:日期時間型
????????YEAR(2):
????????YEAR(4):
????????TIMESTAMP:
MariaDB(mysql)
:MariaDB Foundation - MariaDB.org
MariaDB的特性:
插件式存儲引擎:存儲管理器有多種實現版本,彼此間的功能和特性可能略有區別,用戶可根據需要靈活選擇
存儲引擎也稱為'表類型'
(1)更多的存儲引擎
????????MyISAM :不支持事務
????????MyISAM -->Aria
????????InnoDB -->XtraDB ?:支持事務
(2)實現了諸多擴展和新特性
(3)提供了較多的測試組件
(4)truly only source;
MySQL的發行機制:
Enterprise: 提供了更豐富的功能
Community: 功能還可以,但是是免費的
安裝和使用MariaDB:
安裝方式:
(1)rpm包
(a)由OS的發行商提供
(b)程序官方提供
(2)源碼包
(3)通用二進制格式的程序包
通用二進制格式安裝MariaDB
(1)準備數據目錄
以/mydata/data 目錄為例
(2)安裝配置mariadb
useradd -r mysql tar xvf mariadb-Version.tar.xz -C /usr/local cd /usr/local ln -sv mariadb-Version mysql cd /usr/local/mysql chown -R root:mysql ./* scripts/mysql_install_db --user=mysql --datadir=/mydata/data cp support-files/mysql.server /etc/init.d/mysqld chkconfig -add mysqld(3)提供配置文件
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 innodb_file_per_table=ON skip_name_resolve=ON(4)啟動服務
server mysqld start關系:二維關系(行,列)
表、索引、視圖、……
設計范式:
????????第一范式:字段是原子性的;
????????第二范式:存在可用的主鍵;
????????第三范式:任何字段都不應該依賴于其它表的非主屬性;
約束:primary key, unique key, foreign key, check
MariaDB安裝方式:
通用二進制格式包
源碼編譯安裝:cmake
SQL:
數據庫、表、索引、視圖、存儲過程、存儲函數、觸發器、事件調度器、用戶和權限;
DDL,DML,DCL?
DDL:CREATE,ALTER,DROP
DML:INSERT, DELETE,UPDATE,SELECT
DCL:GRANT,REVOKE
MariaDB程序的組成
C:client
mysql:CLI交互式客戶端程序
mysqldump:備份工具
mysqladmin:管理工具
mysqlbinlog:查看二進制程序的日志
S:server
mysqld
mysqld_safe:建議運行服務端程序
mysqld_multi:多實例
三類套接字地址:
IPV4,3306/tcp
IPV6
Unix Sock:/var/lib/mysql/mysql.sock,/tmp/mysql.sock
C和S之間的通信: localhost,127.0.0.1
命令行交互式客戶端程序:
mysql [OPTIONS] [database]
常用選項:
-uUSERNAME :用戶名,默認為root
-hHOST :遠程主機(即mysql服務器)地址,默認為localhost
-p[PASSWORD] :USERNAME所表示的用戶的密碼,默認為空
注意 :mysql的用戶賬號有兩部分組成:'uUSERNAME'@'HOST';其中HOST用于限制此用戶可通過哪些遠程主機連接當前的mysql服務
HOST的表示方式,支持使用通配符
????????% :匹配任意長度的任意字符
????????_ :匹配任意單個字符
-Ddb_name :連接到服務器端之后,設定期處指明的數據庫為默認數據庫
-e 'SQL COMMAND' :連接至服務器并讓其執行此命令后直接返回
命令:
客戶端命令:本地執行
mysql > help\u db_name :設定哪個庫為默認數據庫 \q :退出 \d CHAR :設定新的語句結束符 \g :語句結束標記 \G :語句結束標記,結果是豎排方式顯示 \s :status ,顯示狀態 \! SHELL_COMMAND?:執行shell命令 \. /path/to/some_sql_script :運行SQL腳本服務端命令:通過mysql連接發往服務器執行并取回結果
DDL,DML,DCL
(1) 語句結束符;
(2) 建立了與某服務器有效通信連接;
注意:每個語句必須有語句結束符,結束符默認為 ';'
數據類型:
表:行和列
創建表:
????????定義表中的字段
????????定義列時需要選定合適的數據類型;
????????符合范式設計的要求;
????????定義約束關系
定義字段時,關鍵的一步即為確定其數據類型
用于確定:數據存儲格式,能參與運算種類,可表示的有效的數據范圍
字符型:字符集
碼表:在字符和二進制數字之間建立映射關系
show character set; 查看字符集
字段類型
字符型:
????????定長字符型:
????????????????CHAR(#) :不區分字符大小寫
????????????????BINARY(#) :區分字符大小寫
????????變長字符型:
????????????????VARCHAR(#)
????????????????VARBINARY(#)
對象存儲:
????????TEXT:
????????BLOB
內置類型:
????????SET
????????ENUM
數值型:
????????精確數值型:
????????????????INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT) : 1,2,3,4,8 字節大小
????????近似數值型:
????????????????FLOAT
????????????????DOUBLE
日期時間型:
????????日期型 : DATE
????????時間型 : TIME
????????日期時間型 : DATETIME
????????時間戳 : TIMESTAMP
????????年份 : YEAR(2),YEAR(4)
數據類型有修飾符:
UNSIGNED : 無符號
NOT NULL : 非空
DEFAULT value : 默認值
服務器端命令:
DDL : 數據定義語言,主要用于管理數據庫組件,例如表,索引,視圖,用戶,存儲過程
CREATE,ALTER,DROP
DML : 數據操縱語言,主要用于管理表中的數據,實現數據的增刪改查;
INSERT,DELETE,UPDATE,SELECT
獲取命令幫助:
mysql> help KEYWORDHELP CREATESQL語句:
DDL:數據定義語言,主要用于管理庫組件,例如數據庫、表、索引、視圖、用戶、存儲過程、存儲函數、觸發器、……
CREATE,ALTER,DROP
DML:數據操縱語言,主要用于管理表中數據,實現數據CRUD操作
DCL:管理授權
數據庫管理
創建:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[DEFAULT] CHARACTER SET [=] charset_name[DEFAULT] COLLATE [=] collation_name查看支持的所有字符集: show character set;
查看支持的所有排序規則: show collation;
create database nihao if not exists testdb;修改:
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name [DEFAULT] COLLATE [=] collation_name刪除:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name查看:
SHOW DATABASES;表管理
創建:
CREATE TABLE [IF NOT EXISTS] tbl_name (create_defination) [table_options]create_defination :
????????字段: col_name data_type
????????鍵:
????????????????PRIMARY KEY (col1,col2,...)
????????????????UNIQUE KEY (col1,col2,...)
????????索引:
????????????????KEY|INDEX [index_name] (col1,col2,...)
????????約束:
????????????????PRIMARY KEY?
????????????????UNIQUE KEY?
????????????????FOREIGN KEY?
????????????????CHECK(expr)
????????索引:
????????????????{INDEX|KEY} ?
????????????????{FULLTEXT|SPATIAL}
table_options:
????????ENGINE=engine_name (存儲引擎)
????????ENGINE=engine_name (存儲引擎)
查看數據庫支持的所有存儲引擎類型:
show engines;查看某表的存儲引擎類型:
show tables status [like 'tbl_name'] CREATE TABLE students(id INT UNSIGNED NOT NULL,name CHAR(30) NOT NULL,age TINYINT UNSIGNED,gender ENUM('f','m'));CREATE TABLE students(id INT UNSIGNED NOT NULL,name CHAR(30) NOT NULL,age TINYINT UNSIGNED,gender ENUM('f','m'),PRIMARY KEY(id,name));CREATE TABLE students(id INT UNSIGNED NOT NULL PRIMARY KEY,name CHAR(30) NOT NULL,age TINYINT UNSIGNED,gender ENUM('f','m')); DESC students; #查看表信息 show tables; #查看數據包 DROP TABLE students; #刪除表修改:
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...]alter_specification:
????????字段:
????????????????添加: ADD [COLUMN] col_name data_type [FIRST | AFTER col_name ]
????????????????????????alter table students add cless VARCHAR(100) NOT NULL; [after name] : 放到name后面
????????????????刪除: DROP [COLUMN] col_name
????????????????????????alter table students drop class;
????????????????修改:(只有不改名字就用modify)
????????????????????????CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
????????????????????????MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
????????????????????????alter table students modify class varchar(100) after age;
????????鍵:
????????????????添加: ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1,col2,...)
????????????????????????alter table students add unique key (name);
????????????????刪除:?
????????????????????????主鍵: DROP PRIMARY KEY
????????????????????????外鍵: DROP FOREIGN KEY fk_symbol
????????索引:
????????????????添加: ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ...
????????alter table students add index class (class);
????????刪除: DROP {INDEX|KEY} index_name
????????????????alter table students drop index name;
表選項
ENGINE[=] engine_name ;表引擎
查看表上的索引信息:
show indexs from students;刪除:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...[RESTRICT | CASCADE]索引管理:
索引是特殊的數據結構;
索引:要有索引名稱
創建:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [BTREE|HASH] ?ON tbl_name (index_col_name,...)create index name_and_class on students (name,class);刪除:
DROP INDEX index_name ON tbl_namedrop index name_and_class on students;查看:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]標的引用方式:
????????tbl_name
????????db_name.tbl_name
第二種創建方式:
復制表結構
第三種創建方式:
復制表數據
DML: INSERT,DELETE,UPDATE,SELECT
INSERT INTO :
INSERT [INTO] tbl_name [(col1,...)] {values|value} (val1,val2,...),(...)insert into students values (1,'nihao',43,'xixi','m'); insert into students (id,name) values (2,'aa'),(3,'dd');注意:
字符型:引號
數值型:一定不要引號
SELECT :
(1) SELECT * FROM tbl_name;
(2) SELECT col1,col2,... from tbl_name;
顯示時,字段可以顯示為別名;
col_name as col_alias(3) SELECT col1,... from tbl_name where clause;
where clause :用于指明挑選條件
col_name 操作符 value;
age > 30;
操作符:
????????>,<,=,!=,<=,>=;
????????BGTWEEN...AND... #表示兩者之間
????????LIKE 'PATTERN'?
通配符:
????????% :任意長度的任意字符
????????_ :任意單個字符
????????RLIKE 'PATTERN'
正則表達式對字符串做模式匹配
IS NULL : 對應的值為空
IS NOT NULL :對應的值為非空
select * from students where id=1;組合條件:
and
or
not?
(4) SELECT col1,... from tbl_name [where clause] order by col_name,col_name[ASC|DESC];ASC表示升序排序,DESC表示降序排序
DELETE:
DELETE FROM tbl_name [where where_condition] [order by ...] [limit row_count] create table students (id int,name varchar(30),age int);for i in {1..100} ;do a=$[$RANDOM%100];mysql -e "insert into stu.students values ($i,'stu$k',$a);" -proot ;doneselect * from stu.students; select * from stu.students order by age desc; delete from stu.students order by age desc limit 20; #從高到低排序并刪除最多20行(1) DELETE FROM tbl_name where where_condition
(2) DELETE FROM tbl_name [order by...][limit row_count]
UPDATE:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...[WHERE where_condition][ORDER BY ...][LIMIT row_count] update stu.students set age=age-5 order by id desc limit 10; select id,name,age from stu.students order by id desc;用戶賬號及權限管理
用戶賬號: 'username'@'host'
host : 此用戶訪問當前mysql服務器時,允許其通過哪些主機遠程創建連接
表示方式: ip , 網絡地址,主機名,通配符(%,_)
禁止檢查主機名 : my.cnf
[mysqld]skip_name_resolve = ON創建用戶賬號:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';刪除用戶賬號:
DROP USER 'username'@'host' [, 'username'@'host'] ...授權:
權限級別:管理權限,數據庫,表,字段,存儲例程
GRANT priv_type,... ON [object_type] db_name.tbl_name TO 'username'@'host' [IDENTIFIED BY 'password'];priv_type : ALL [PRIVILEGES]
db_name.tbl_name :
????????*.* : 所有庫的所有表
????????db_name.* :
????????db_name.routine_name : 指定庫上的存儲過程或存儲函數
[object_type]
????????TABLE
????????FUNCTION
????????PROCEDURE
查看指定用戶所獲得的權限:
show grants for 'username'@'host'; show grants for current_user; #查看自己的權限回收權限:
revoke priv_type,... on db_name.tbl_name from 'username'@'host'; revoke insert on stu.students from 'stuuser'@'localhost'; flush privileges; #刷新權限注意: MariaDB服務進程啟動時,會讀取mysql庫的所有授權表至內存中
(1) GRANT 或 REVOKE 命令等執行的權限操作會保存于表中,MariaDB此時一般會自動重讀授權表,權限修改會立即生效
(2) 其他方式實現的權限修改,想要生效,必須手動運行 FLUSH PRIVILEGES;命令即可
加固mysql服務器,在安裝完成后,運行 mysql_secure_installation 命令,根據提示操作.
圖形管理組件:
phpmyadmin
php-mbstring
php-mcrypt
phpmyadmin配置信息
config.inc.php
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */openssl rand -base64 15 oieid9Wk6sEREEXxzcm5$cfg['blowfish_secret'] = 'oieid9Wk6sEREEXxzcm5'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */總結
以上是生活随笔為你收集整理的Mariadb数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家庭养老床位,新导智能居家养老的智能床垫
- 下一篇: linux cmake编译源码,linu