Mariadb数据库
Mariadb基礎(chǔ)
關(guān)系模型:
二維關(guān)系:表
行:row, entry
列:column, attribution
索引:數(shù)據(jù)結(jié)構(gòu),輔助完成數(shù)據(jù)查找的;
SQL代碼:
存儲(chǔ)過程
存儲(chǔ)函數(shù)
觸發(fā)器
事件調(diào)度器
事務(wù)(Transaction):組織多個(gè)操作為一個(gè)整體,要么全部都執(zhí)行,要么全部都不執(zhí)行;
'回滾操作' ,rollback
一個(gè)存儲(chǔ)系統(tǒng)是否支持事務(wù),就看其是否滿足ACID測(cè)試:
A:原子性;
C:一致性;
I:隔離性;
D:持久性;
數(shù)據(jù)庫:數(shù)據(jù)集合:
表:為了滿足范式設(shè)計(jì)要求,將一個(gè)數(shù)據(jù)集分拆為多個(gè)
約束: constranint,向數(shù)據(jù)表插入的數(shù)據(jù)要遵循的限制規(guī)則
主鍵:primary key,
????????一個(gè)或多個(gè)字段的集合,填入主鍵中的數(shù)據(jù),必須不同于已存在的數(shù)據(jù),不能為空,一個(gè)表只能有一個(gè)主鍵;
外鍵:foreign key,
????????一個(gè)表中某字段中能插入的數(shù)據(jù),取決于另外一張表的主鍵中的數(shù)據(jù)
唯一鍵:unique key,
????????一個(gè)或多個(gè)字段的組合,填入唯一鍵中的數(shù)據(jù),必須不同于已存在的數(shù)據(jù),可以為空,一個(gè)表可以存在多個(gè)惟一鍵
檢查性約束:check,取決于表達(dá)式的要求
索引:將表中的某一個(gè)或某些字段抽取出來,單獨(dú)將其組織一個(gè)獨(dú)特的數(shù)據(jù)結(jié)構(gòu)中;
常見的索引類型:
????????樹型 :?BTree
????????hash :?k/v
注意:索引有助于請(qǐng)讀求,但不利于寫請(qǐng)求
關(guān)系運(yùn)算:
選擇:挑選出符合條件的行;
投影:挑選出符合需要的列;
連接:將多張表關(guān)聯(lián)起來;
數(shù)據(jù)抽象:
物理層: 決定數(shù)據(jù)的存儲(chǔ)格式,即如何將數(shù)據(jù)組織成為物理文件
邏輯層: 描述DB存儲(chǔ)什么數(shù)據(jù),以及數(shù)據(jù)間存在什么樣的關(guān)系
視圖層: 描述DB中的部分?jǐn)?shù)據(jù);
關(guān)系模型分類:
關(guān)系模型
實(shí)體-關(guān)系模型
基于對(duì)象的關(guān)系模型
半結(jié)構(gòu)化關(guān)系模型
MySQL:
C/S架構(gòu)
????????S:mysqld, mysqld_safe, mysqld_multi
????????C:mysql, mysqladmin, mysqldump, ...
非客戶端工具:工作于服務(wù)端主機(jī),用于實(shí)現(xiàn)一些管理操作;
數(shù)據(jù)類型:
字符型:
????????定長字符型:
????????????????CHAR(#)
????????????????BINARY(#)
????????變長字符型:
????????????????VARCHAR(#)
????????????????VARBINARY(#)
內(nèi)建數(shù)據(jù)類型:
????????ENUM
????????SET?
數(shù)值型:
????????精確數(shù)值:
????????????????整型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
????????近似數(shù)值:
????????????????浮點(diǎn)型:
????????????????FLOAT
????????????????DOUBLE
日期時(shí)間:
????????DATE:日期型
????????TIME:時(shí)間型
????????DATETIME:日期時(shí)間型
????????YEAR(2):
????????YEAR(4):
????????TIMESTAMP:
MariaDB(mysql)
:MariaDB Foundation - MariaDB.org
MariaDB的特性:
插件式存儲(chǔ)引擎:存儲(chǔ)管理器有多種實(shí)現(xiàn)版本,彼此間的功能和特性可能略有區(qū)別,用戶可根據(jù)需要靈活選擇
存儲(chǔ)引擎也稱為'表類型'
(1)更多的存儲(chǔ)引擎
????????MyISAM :不支持事務(wù)
????????MyISAM -->Aria
????????InnoDB -->XtraDB ?:支持事務(wù)
(2)實(shí)現(xiàn)了諸多擴(kuò)展和新特性
(3)提供了較多的測(cè)試組件
(4)truly only source;
MySQL的發(fā)行機(jī)制:
Enterprise: 提供了更豐富的功能
Community: 功能還可以,但是是免費(fèi)的
安裝和使用MariaDB:
安裝方式:
(1)rpm包
(a)由OS的發(fā)行商提供
(b)程序官方提供
(2)源碼包
(3)通用二進(jìn)制格式的程序包
通用二進(jìn)制格式安裝MariaDB
(1)準(zhǔn)備數(shù)據(jù)目錄
以/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包安裝的服務(wù)的配置文件查找次序
/etc/mysql/my.cnf -->/etc/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
通用二進(jìn)制安裝的服務(wù)的配置文件的查找次序
/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添加三個(gè)選項(xiàng):
datadir=/mydata/data innodb_file_per_table=ON skip_name_resolve=ON(4)啟動(dòng)服務(wù)
server mysqld start關(guān)系:二維關(guān)系(行,列)
表、索引、視圖、……
設(shè)計(jì)范式:
????????第一范式:字段是原子性的;
????????第二范式:存在可用的主鍵;
????????第三范式:任何字段都不應(yīng)該依賴于其它表的非主屬性;
約束:primary key, unique key, foreign key, check
MariaDB安裝方式:
通用二進(jìn)制格式包
源碼編譯安裝:cmake
SQL:
數(shù)據(jù)庫、表、索引、視圖、存儲(chǔ)過程、存儲(chǔ)函數(shù)、觸發(fā)器、事件調(diào)度器、用戶和權(quán)限;
DDL,DML,DCL?
DDL:CREATE,ALTER,DROP
DML:INSERT, DELETE,UPDATE,SELECT
DCL:GRANT,REVOKE
MariaDB程序的組成
C:client
mysql:CLI交互式客戶端程序
mysqldump:備份工具
mysqladmin:管理工具
mysqlbinlog:查看二進(jìn)制程序的日志
S:server
mysqld
mysqld_safe:建議運(yùn)行服務(wù)端程序
mysqld_multi:多實(shí)例
三類套接字地址:
IPV4,3306/tcp
IPV6
Unix Sock:/var/lib/mysql/mysql.sock,/tmp/mysql.sock
C和S之間的通信: localhost,127.0.0.1
命令行交互式客戶端程序:
mysql [OPTIONS] [database]
常用選項(xiàng):
-uUSERNAME :用戶名,默認(rèn)為root
-hHOST :遠(yuǎn)程主機(jī)(即mysql服務(wù)器)地址,默認(rèn)為localhost
-p[PASSWORD] :USERNAME所表示的用戶的密碼,默認(rèn)為空
注意 :mysql的用戶賬號(hào)有兩部分組成:'uUSERNAME'@'HOST';其中HOST用于限制此用戶可通過哪些遠(yuǎn)程主機(jī)連接當(dāng)前的mysql服務(wù)
HOST的表示方式,支持使用通配符
????????% :匹配任意長度的任意字符
????????_ :匹配任意單個(gè)字符
-Ddb_name :連接到服務(wù)器端之后,設(shè)定期處指明的數(shù)據(jù)庫為默認(rèn)數(shù)據(jù)庫
-e 'SQL COMMAND' :連接至服務(wù)器并讓其執(zhí)行此命令后直接返回
命令:
客戶端命令:本地執(zhí)行
mysql > help\u db_name :設(shè)定哪個(gè)庫為默認(rèn)數(shù)據(jù)庫 \q :退出 \d CHAR :設(shè)定新的語句結(jié)束符 \g :語句結(jié)束標(biāo)記 \G :語句結(jié)束標(biāo)記,結(jié)果是豎排方式顯示 \s :status ,顯示狀態(tài) \! SHELL_COMMAND?:執(zhí)行shell命令 \. /path/to/some_sql_script :運(yùn)行SQL腳本服務(wù)端命令:通過mysql連接發(fā)往服務(wù)器執(zhí)行并取回結(jié)果
DDL,DML,DCL
(1) 語句結(jié)束符;
(2) 建立了與某服務(wù)器有效通信連接;
注意:每個(gè)語句必須有語句結(jié)束符,結(jié)束符默認(rèn)為 ';'
數(shù)據(jù)類型:
表:行和列
創(chuàng)建表:
????????定義表中的字段
????????定義列時(shí)需要選定合適的數(shù)據(jù)類型;
????????符合范式設(shè)計(jì)的要求;
????????定義約束關(guān)系
定義字段時(shí),關(guān)鍵的一步即為確定其數(shù)據(jù)類型
用于確定:數(shù)據(jù)存儲(chǔ)格式,能參與運(yùn)算種類,可表示的有效的數(shù)據(jù)范圍
字符型:字符集
碼表:在字符和二進(jìn)制數(shù)字之間建立映射關(guān)系
show character set; 查看字符集
字段類型
字符型:
????????定長字符型:
????????????????CHAR(#) :不區(qū)分字符大小寫
????????????????BINARY(#) :區(qū)分字符大小寫
????????變長字符型:
????????????????VARCHAR(#)
????????????????VARBINARY(#)
對(duì)象存儲(chǔ):
????????TEXT:
????????BLOB
內(nèi)置類型:
????????SET
????????ENUM
數(shù)值型:
????????精確數(shù)值型:
????????????????INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT) : 1,2,3,4,8 字節(jié)大小
????????近似數(shù)值型:
????????????????FLOAT
????????????????DOUBLE
日期時(shí)間型:
????????日期型 : DATE
????????時(shí)間型 : TIME
????????日期時(shí)間型 : DATETIME
????????時(shí)間戳 : TIMESTAMP
????????年份 : YEAR(2),YEAR(4)
數(shù)據(jù)類型有修飾符:
UNSIGNED : 無符號(hào)
NOT NULL : 非空
DEFAULT value : 默認(rèn)值
服務(wù)器端命令:
DDL : 數(shù)據(jù)定義語言,主要用于管理數(shù)據(jù)庫組件,例如表,索引,視圖,用戶,存儲(chǔ)過程
CREATE,ALTER,DROP
DML : 數(shù)據(jù)操縱語言,主要用于管理表中的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的增刪改查;
INSERT,DELETE,UPDATE,SELECT
獲取命令幫助:
mysql> help KEYWORDHELP CREATESQL語句:
DDL:數(shù)據(jù)定義語言,主要用于管理庫組件,例如數(shù)據(jù)庫、表、索引、視圖、用戶、存儲(chǔ)過程、存儲(chǔ)函數(shù)、觸發(fā)器、……
CREATE,ALTER,DROP
DML:數(shù)據(jù)操縱語言,主要用于管理表中數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)CRUD操作
DCL:管理授權(quán)
數(shù)據(jù)庫管理
創(chuàng)建:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[DEFAULT] CHARACTER SET [=] charset_name[DEFAULT] COLLATE [=] collation_name查看支持的所有字符集: show character set;
查看支持的所有排序規(guī)則: 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;表管理
創(chuàng)建:
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 (存儲(chǔ)引擎)
????????ENGINE=engine_name (存儲(chǔ)引擎)
查看數(shù)據(jù)庫支持的所有存儲(chǔ)引擎類型:
show engines;查看某表的存儲(chǔ)引擎類型:
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; #查看數(shù)據(jù)包 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;
表選項(xiàng)
ENGINE[=] engine_name ;表引擎
查看表上的索引信息:
show indexs from students;刪除:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...[RESTRICT | CASCADE]索引管理:
索引是特殊的數(shù)據(jù)結(jié)構(gòu);
索引:要有索引名稱
創(chuàng)建:
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]標(biāo)的引用方式:
????????tbl_name
????????db_name.tbl_name
第二種創(chuàng)建方式:
復(fù)制表結(jié)構(gòu)
第三種創(chuàng)建方式:
復(fù)制表數(shù)據(jù)
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');注意:
字符型:引號(hào)
數(shù)值型:一定不要引號(hào)
SELECT :
(1) SELECT * FROM tbl_name;
(2) SELECT col1,col2,... from tbl_name;
顯示時(shí),字段可以顯示為別名;
col_name as col_alias(3) SELECT col1,... from tbl_name where clause;
where clause :用于指明挑選條件
col_name 操作符 value;
age > 30;
操作符:
????????>,<,=,!=,<=,>=;
????????BGTWEEN...AND... #表示兩者之間
????????LIKE 'PATTERN'?
通配符:
????????% :任意長度的任意字符
????????_ :任意單個(gè)字符
????????RLIKE 'PATTERN'
正則表達(dá)式對(duì)字符串做模式匹配
IS NULL : 對(duì)應(yīng)的值為空
IS NOT NULL :對(duì)應(yīng)的值為非空
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;用戶賬號(hào)及權(quán)限管理
用戶賬號(hào): 'username'@'host'
host : 此用戶訪問當(dāng)前mysql服務(wù)器時(shí),允許其通過哪些主機(jī)遠(yuǎn)程創(chuàng)建連接
表示方式: ip , 網(wǎng)絡(luò)地址,主機(jī)名,通配符(%,_)
禁止檢查主機(jī)名 : my.cnf
[mysqld]skip_name_resolve = ON創(chuàng)建用戶賬號(hào):
CREATE USER 'username'@'host' IDENTIFIED BY 'password';刪除用戶賬號(hào):
DROP USER 'username'@'host' [, 'username'@'host'] ...授權(quán):
權(quán)限級(jí)別:管理權(quán)限,數(shù)據(jù)庫,表,字段,存儲(chǔ)例程
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 : 指定庫上的存儲(chǔ)過程或存儲(chǔ)函數(shù)
[object_type]
????????TABLE
????????FUNCTION
????????PROCEDURE
查看指定用戶所獲得的權(quán)限:
show grants for 'username'@'host'; show grants for current_user; #查看自己的權(quán)限回收權(quán)限:
revoke priv_type,... on db_name.tbl_name from 'username'@'host'; revoke insert on stu.students from 'stuuser'@'localhost'; flush privileges; #刷新權(quán)限注意: MariaDB服務(wù)進(jìn)程啟動(dòng)時(shí),會(huì)讀取mysql庫的所有授權(quán)表至內(nèi)存中
(1) GRANT 或 REVOKE 命令等執(zhí)行的權(quán)限操作會(huì)保存于表中,MariaDB此時(shí)一般會(huì)自動(dòng)重讀授權(quán)表,權(quán)限修改會(huì)立即生效
(2) 其他方式實(shí)現(xiàn)的權(quán)限修改,想要生效,必須手動(dòng)運(yùn)行 FLUSH PRIVILEGES;命令即可
加固mysql服務(wù)器,在安裝完成后,運(yùn)行 mysql_secure_installation 命令,根據(jù)提示操作.
圖形管理組件:
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! */總結(jié)
以上是生活随笔為你收集整理的Mariadb数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家庭养老床位,新导智能居家养老的智能床垫
- 下一篇: C语言程序设计教程习题和答案-C语言期末