天天看点

Linux自学笔记——MariaDB基础

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目录,并创建软连接;

Linux自学笔记——MariaDB基础

创建用户组和相关目录;

Linux自学笔记——MariaDB基础

权限修改;

Linux自学笔记——MariaDB基础

生成元数据库;

获取帮助:

Linux自学笔记——MariaDB基础

指明用户位置和数据库目录创建元数据库:

Linux自学笔记——MariaDB基础

复制运行脚本,并将其加入服务列表中;

Linux自学笔记——MariaDB基础

复制配置文件并编辑添加一下三行;

复制文件;

Linux自学笔记——MariaDB基础

编辑配置文件;

Linux自学笔记——MariaDB基础

启动服务;

Linux自学笔记——MariaDB基础

进入mysql;

Linux自学笔记——MariaDB基础

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

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:数据定义语言,主要用于管理数据库组件,例如表、索引、视图、用户、存储过程

DML:数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查;

获取命令帮助:

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]

修改数据库的默认字符集:

Linux自学笔记——MariaDB基础

修改数据库默认字符排序规则:

Linux自学笔记——MariaDB基础

删除:

DROP {DATABASE | SCHEMA} [IF EXITS] db_name

Linux自学笔记——MariaDB基础

查看:

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

创建数据表:

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,…)

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]
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,如需转载请自行联系原作者