数据库概念以及linux中的MariaDB基础设置

什么是数据库?
  • 数据库是数据的仓库
  • 与普通的“数据仓库”不同的是,数据库依据“数据结构”来组织数据,因为“数据结构”,所以我们看到的数据是比较“条理化”的(比如不会跟以前的普通文件存储式存储成一个文件那么不条理化,我们的数据库分成一个个库,分成一个个表,分成一条条记录,这些记录是多么分明)
  • 也因为其“数据结构”式,所以有极高的查找速率(比如B-Tree查找法),(由于专精,可以根据自己的结构特性来快速查找,所以对于数据库的查找会比较快捷;不像普通文件系统的“查找”那么通用)
  • 如果与EXCEL来比的话,能明显的看出数据库的好处,我们能给一个个“字段”添加“约束”(比如约束一列的值不能为空)
  • 数据库与普通的文件系统的主要区别(起因):数据库能快速查找对应的数据
  • 常说的XX数据库,其实实质上是XX数据库管理系统。数据库管理系统是一个软件,是数据库管理的程序实现。

什么是关系型数据库?
  • 关系型数据库是依据关系模型来创建的数据库。
  • 所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
  • 关系模型是我们生活中能经常遇见的模型,存储这类数据一般用关系型数据库
  • 关系模型包括数据结构(数据存储的问题,二维表)、操作指令集合(SQL语句)、完整性约束(表内数据约束、表与表之间的约束)。
数据的存储形式:

数据库概念以及linux中的MariaDB基础设置

关系的处理形式:

数据库概念以及linux中的MariaDB基础设置

下面是一个E-R图,是多个模型一起用的情况:

数据库概念以及linux中的MariaDB基础设置

常见的关系型数据库
Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL

关系型数据库的特点
  • 安全(因为存储在磁盘中,不会说突然断电数据就没有了)
  • 容易理解(建立在关系模型上)
  • 但不节省空间(因为建立在关系模型上,就要遵循某些规则,好比数据中某字段值即使为空仍要分配空间)

什么是非关系型数据库?
  1. 非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库)
  2. 非关系型模型比如有:
    • 列模型:存储的数据是一列列的。关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录。(这种模型,数据即索引,IO很快,主要是一些分布式数据库)
    • 键值对模型:存储的数据是一个个“键值对”,比如name:liming,那么name这个键里面存的值就是liming
      数据库概念以及linux中的MariaDB基础设置
    • 文档类模型:以一个个文档来存储数据,有点类似“键值对”
      数据库概念以及linux中的MariaDB基础设置
常见的非关系型数据库
  • 列模型:Hbase
  • 键值对模型:redis,MemcacheDB
  • 文档类模型:mongoDB

非关系型数据库的特点
  • 效率高(因为存储在内存中)
  • 不安全(断电丢失数据,但其中redis可以同步数据到磁盘中),现在很多非关系型数据库都开始支持转存到磁盘中

什么是 MariaDB数据库?

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了 MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英 语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL 卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。

为何改了个名字呢,这其中是有些典故的。

MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。
MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。目前MariaDB是发展最快的MySQL分支版本,新版本发布速度已经超过了Oracle官方的MySQL版本。
在Oracle控制下的MySQL开发,有两个主要问题:

  • MySQL核心开发团队是封闭的,完全没有Oracle之外的成员参加。很多高手即使有心做贡献,也没办法做到。
  • MySQL新版本的发布速度,在Oracle收购Sun之后大为减缓。Widenius有一个ppt,用数据比较了收购之前和之后新版本的发布速度。有很 多bugfix和新的feature,都没有及时加入到发布版本之中。

RedHat中设置MariaDB

一、安装部署

# 系统已经默认安装该数据库,如果没有安装自己安装

[[email protected] ~]# yum -y install mariadb

# 启动数据库服务

[[email protected] ~]# systemctl restart mariadb.service

# 初始化数据库

[[email protected] ~]# mysql_secure_installation

# 登录到数据库

[[email protected] ~]# mysql -uroot -predhat

-u后面是用户名 -p后面是密码
用户名与u以及密码与p中间是没有空格的,否则登录不成功
但是这样输入密码会暴露在外面,在这里可以用mysql -uroot -p然后回车输入密码
这样可以避免密码暴露

输入账号密码后就进入了MariaDB数据库:

数据库概念以及linux中的MariaDB基础设置

# 查询MairaDB数据库下有哪些数据库

MariaDB [(none)]> show databases;
查询到有三个数据库数据库概念以及linux中的MariaDB基础设置

# 切换到某个数据库

MariaDB [(none)]> use mysql;
数据库概念以及linux中的MariaDB基础设置

# 直接连接到MairaDB数据库下的数据库

[[email protected] ~]# mysql -u root -p mysql
数据库概念以及linux中的MariaDB基础设置

# 退出MariaDB数据库

MariaDB [mysql]> exit
MariaDB [mysql]> quit
都行

# 创建数据库

MariaDB [(none)]> create database luntan;

# 查看数据库下面都有哪些表

MariaDB [mysql]> show tables;

# 查看数据表的表结构

MariaDB [mysql]> desc user;
数据库概念以及linux中的MariaDB基础设置

# 查看user表中的某些数据

MariaDB [mysql]> select Password from user;
数据库概念以及linux中的MariaDB基础设置

# 添加一张表结构

数据库概念以及linux中的MariaDB基础设置
数据库概念以及linux中的MariaDB基础设置

# 添加表中数据

如果是只输入特定的一些值,在括号表述出来数据库概念以及linux中的MariaDB基础设置
数据库概念以及linux中的MariaDB基础设置

# 更新表中数据

MariaDB [yanda]> update student set name=‘lakai’ where name='kaili’
数据库概念以及linux中的MariaDB基础设置

# 删除表中数据

MariaDB [yanda]> delete from student where number=1;
数据库概念以及linux中的MariaDB基础设置

# 查看当前使用用户

MariaDB [yanda]> select user();
数据库概念以及linux中的MariaDB基础设置

# 查看当前用户的数据库

MariaDB [yanda]> select database();
数据库概念以及linux中的MariaDB基础设置

# 创建数据库登录用户

数据库概念以及linux中的MariaDB基础设置
数据库概念以及linux中的MariaDB基础设置

# root给予用户权限

用刚刚创建的maomao用户登陆到MariaDB,但是不能连接到yanda数据库,因为root未给maomao任何关于yanda数据库的权限,所以无法访问。如下图:
数据库概念以及linux中的MariaDB基础设置
root给予权限- - - 需用root用户登录MariaDB
数据库概念以及linux中的MariaDB基础设置用户后面啥都不写默认就是@localhost
测试:
数据库概念以及linux中的MariaDB基础设置因为只给maomao授予了select和update权限,所以在maomao用户下测试select可以使用,但是delete不可以使用(未授予权限)

# root收回用户权限

MariaDB [(none)]> revoke update on yanda.student from maomao;
测试:
数据库概念以及linux中的MariaDB基础设置显然,select权限还在,但是update权限就没有了
注:如果收回的是select权限,那么update虽然权限没有被收回,但是也无法去使用

# 备份与还原

[[email protected] ~]# mysqldump -u root -p mysql > /mysql_backup.dumpEnter password:
将mysql这个数据库备份至根下以mysql_backup.dumpEnter password为名


删除mysql数据库下的几个表
数据库概念以及linux中的MariaDB基础设置
对数据进行恢复:
[[email protected] ~]# mysql -u root -p mysql </mysql_backup.dump
Enter password:

数据库概念以及linux中的MariaDB基础设置删除的表又恢复了