Linux自学笔记——MariaDB基础

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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

    支持SQL语句对数据管理:
        DDL,DML
            DDL:CREATE,ALTER,DROP,SHOW
            DML:INSERT,DELETE,SELECT,UPDATE
    授权能远程的连接用户:

  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:

  1. 准备数据目录:
    以/mydata/data目录为例;
  2. 安装配置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
  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
inodb_file_per_table= ON
skip_name_resolve = ON
4. 启动服务
#service mysqld start
示例,演示:

  1. 下载解压程序文件至/usr/local目录,并创建软连接;
    Linux自学笔记MariaDB基础
  2. 创建用户组和相关目录;
    Linux自学笔记MariaDB基础
  3. 权限修改;
    Linux自学笔记MariaDB基础
  4. 生成元数据库;
    获取帮助:
    Linux自学笔记MariaDB基础
    指明用户位置和数据库目录创建元数据库:
    Linux自学笔记MariaDB基础
  5. 复制运行脚本,并将其加入服务列表中;
    Linux自学笔记MariaDB基础
  6. 复制配置文件并编辑添加一下三行;
    复制文件;
    Linux自学笔记MariaDB基础
    编辑配置文件;
    Linux自学笔记MariaDB基础
  7. 启动服务;
    Linux自学笔记MariaDB基础
  8. 进入mysql;
    Linux自学笔记MariaDB基础

MariaDB的基础(2)
MariaDB程序的组成:
C:Client
mysql:CLI交互式客户端程序;
mysqldump:备份工具;
mysqladmin:管理工具:
mysqlbinlog:

S:Server
mysqld
mysqld_safe:建议运行服务端程序;
mysqld_multi:多实例;

    三类套接字地址:
       IPv4, 3306/tcp
       Unix Socket:/var/lib/mysql/mysql.sock,/tmp/mysql.sock
    &emsp;      C < - - >S:localhost, 127.0.0.1

命令行交互式客户端程序: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
 Linux自学笔记MariaDB基础
\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:数据定义语言,主要用于管理数据库组件,例如表、索引、视图、用户、存储过程
CREATE ALTER DROP
DML:数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查;
INSERT,DELETE,UPDATE,SELECT
获取命令帮助:
mysql > help KEYBOARD
数据库管理:
创建:
CREATE { DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
Linux自学笔记MariaDB基础
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
查看支持的所有的字符集:SHOW CHARACTER SET;
Linux自学笔记MariaDB基础
查看支持的所有排序规则:SHOW COLLATION;
Linux自学笔记MariaDB基础
修改:
ALTER {DATABASE | SCHEMA } [db_name]
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
修改数据库的默认字符集:
Linux自学笔记MariaDB基础
修改数据库默认字符排序规则:
Linux自学笔记MariaDB基础
删除:
DROP {DATABASE | SCHEMA} [IF EXITS] db_name
Linux自学笔记MariaDB基础 
查看:
SHOW DATABASES LIKE ‘’;
Linux自学笔记MariaDB基础
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
创建数据表:
Linux自学笔记MariaDB基础
查看数据可支持的所有存储引擎类型:
mysql> SHOW ENGINES;
Linux自学笔记MariaDB基础
查看表结构:
Linux自学笔记MariaDB基础 
查看某标的存储引擎类型:
mysql> SHOW TABLES STATUS [LIKE ‘tb1_name’]
Linux自学笔记MariaDB基础 
修改:
ALTER [ONLINE | OFFLINE ] [IGNORE] TABLE tb1_name [alter_specification [,alter_specification] …]
Alter_specification:
字段:
添加:ADD [COLUMN] col_name data_type [FIRST |AFTER col_name]
Linux自学笔记MariaDB基础
删除:DROP [COLUMN] col_name
Linux自学笔记MariaDB基础
修改:
CHANGE [COLUMN] old_col_name new_col_name column_definnition [FIRST|AFTER col_name]
Linux自学笔记MariaDB基础
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
Linux自学笔记MariaDB基础
键:
添加:ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1,col2,…)

                        删除:
                            主键:DROP PRIMARY KEY
                            外键:DROP FOREIGN KEY fk_symbol
                    索引:
                        添加:ADD {INDEX|KEY} [index_name]  (col1, col2,...)
                        删除:DROP {INDEX|KEY}  index_name
                    表选项:
                        ENGINE [=] engine_name
                    查看表上的索引的信息:
                        mysql> SHOW INDEXES FROM tbl_name;
                         ![](http://i2.51cto.com/images/blog/201711/24/a18a9861e2bace20b47d6bd4dc102c19.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
                删除:
                DROP  TABLE  [IF EXISTS]   tbl_name [, tbl_name] ...

                表的引用方式:
                    tbl_name
                    db_name.tbl_name

                第二种创建方式:
                    复制表结构;

                第三种创建方式:
                    复制表数据;
        索引管理:
            索引是特殊的数据结构;
            索引:要有索引名称;
            创建:

CREATE [UNIQUE|FULL TEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tb1_name (col1,col2,…)
Linux自学笔记MariaDB基础
删除:
DROP INDEX index_name ON tb1_name
Linux自学笔记MariaDB基础
DML: INSERT , DELETE, UPDATE , SELECT
INSERT INTO:
INSERT [INTO] tb1_name [(col1,…)] {VALUES|VALUE} (val1,…),(…),…
注意:
字符型:引号;
数值型:不能用引号;
Linux自学笔记MariaDB基础 
SELECT:
1) SELECT * FROM tb1_name;
Linux自学笔记MariaDB基础
2) SELECT col1,col2,… FROM tb1_name;
显示时,字段可以显示为别名:
col_name AS col_alias
Linux自学笔记MariaDB基础
3) SELECT col1,…FROM tb1_name WHERE clause;
WHERE clause:用于指明挑选条件;
col_name 操作符 value:
age>30;
Linux自学笔记MariaDB基础
操作符(1):

,<,>=,<=,==,!=
组合条件:
and
or
not
操作符(2):
BETWEEN … AND …
LIKE ‘PATTERN’
通配符:
%:任意长度的任意字符;
_:任意单个字符;
RLIKE ‘PATTERN’
正则表达式对字符串做模式匹配;
IS NULL
IS NOT NULL
Linux自学笔记MariaDB基础
4) 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]
skip_name_resolve = ON
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,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
运维 网络协议 Linux
腾讯T6-9首发“Linux内核源码底层原理开发进阶笔记”,差距不止一点点哦
腾讯T6-9首发“Linux内核源码底层原理开发进阶笔记”,差距不止一点点哦
|
6月前
|
关系型数据库 MySQL Linux
Linux(centos 7.5)服务器安装MariaDB
Linux(centos 7.5)服务器安装MariaDB
121 0
|
1月前
|
算法 Linux
【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法
【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法
|
11天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
34 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
5月前
|
缓存 网络协议 Linux
牛客网论坛最具争议的Linux内核成神笔记,GitHub已下载量已过百万(下)
牛客网论坛最具争议的Linux内核成神笔记,GitHub已下载量已过百万
|
1月前
|
Linux 网络安全 开发工具
【Linux笔记】常用的Linux的指令
【Linux笔记】常用的Linux的指令
|
5月前
|
JSON Linux 开发工具
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
56 0
|
2月前
|
Linux 数据安全/隐私保护 Android开发
10 个最佳 Linux 开源笔记软件
10 个最佳 Linux 开源笔记软件
108 1
|
7月前
|
关系型数据库 Linux 网络安全
Linux系统下安装mariaDB数据库及防火墙
Linux系统下安装mariaDB数据库及防火墙
113 0
|
2月前
|
缓存 Shell Linux
《linux鸟哥的私房菜》笔记(下)
《linux鸟哥的私房菜》笔记(下)
24 0