末学者笔记--MariaDB 数据库 1玄
MariaDB 数据库1玄
一.数据库介绍
简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据。
更简单的理解形象,数据库和我们生活追踪存放杂物的储物间仓库性质一样,区别只是存放的东西不通,杂物间存放实体的物件,而数据库里存储的是数据,这样我们就对数据库有一个初步了解了。
数据库诞生于1950年,随着信息技术的发展和人类社会的不断进步,特别是2000年后,数据库不在仅仅是存储和管理数据了,而转变成用户所需要的各种数据管理的方式,数据库有很多种类和功能,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
二.数据库的种类
按照早起的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库,网络式数据库和关系型数据库,而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库
三.关系型数据库
1.介绍与由来
虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺,用户在对这两种数据库进行存取时,仍然需要明确数据库的存储结构,支出存取路径,而关系型数据库就可以很好的解决这些问题
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(既二维格式表)。例如宏福教育某一期的学生关系就是一个二元关系,在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表上,通过对这些关联表格分类,合并,连接或选取等运算来实现数据的管理。(摘选自网络)
关系型数据库诞生距今已经有40多年了,从理论产生发展到现实产品,例如:大家最常见的mysql和oracle数据库,oracle在数据库领域里上升到了霸主的地位,形成每年高达数百亿美元的庞大产业市场,而mysql也是不容忽视的数据库,以至于被oracle中心收购了。
关系型数据库表之间的关系列举
2.概念
关系:存储数据的表的表名
元组:就是表中的一条记录(一行就是一条记录)
属性:就是表中的一个字段(一列就是一个字段)
域:字段的取值范围
关键字:可以唯一标识一条记录的字段(这也是一个或多个字段)
关系模型:表和表之间的关系
3.关系型数据库的优缺点
优点:
1) 容易理解
2) 可以借助于sql语句来进行数据的读写
3) 便于维护表中的数据(主要用于保证数据完整、数据一致)
缺点:
1) 事务一致性(数据一致性)
为了保证数据的完整,会带来额外的开销,导致性能降低
2) 关系型数据库在高并发的读写请求下,会程序系统的性能瓶颈
3) 可扩展性
拆分,分库,分表
4) 读写的时效性
金融:对时效性往往要求不高
web,社交网络:对时效要较高
5) 需要写复杂的SQL,甚至需要用多表联合查询
四.非关系型数据库(nosql)
非关系型数据库也称之为nosql数据库,请注意,nosql的本意是“not only SQL”,指的是非关系型数据库,而不是“no SQL”的意思,因此nosql的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效补充,NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
随着互联网的兴起,超大规模和高并发量的微博,微信,SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:传统的关系型数据库IO瓶颈,性能瓶颈都难以有效突破,于是开始出现了大批针对特定场景,以高性能和使用便利为目的的功能特异化的数据库产品,NoSQL类的数据库就是在这样的情景中诞生并得到了非常迅速的发展
NoSQL是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面,NoSQL数据存储不需要固定的表结构,通常也不存在连接操作,在大数据存取上具备关系型数据库无法比拟的性能优势,该术语(NoSQL)在2009年初得到了广泛的认同.
google的BigTable与Amazon的Dynamo是非常成功的商业NoSQL,一些开源的NoSQL体系,如
Redis, mongodb也逐渐的越来越受到各大中小型企业的欢迎和追捧
非关系型数据库的种类:
键值(key-value)存储数据
键值数据库就类似传统语言中使用的哈希表,可以通过key来添加,查询或者删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性
键值(key-value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据,key/value模型对于IT系统来说的优势在于简单,易部署,高并发
五.常见的数据库
非关系型数据库(nosql):mongodb,redias
关系型数据库:oracle,db2,sqlserver,mysql,mariadb
六.RDBMS(关系型数据库管理系统)
Relational Database Management System
- sql语句主要分为:
- DQL:数据查询语言,用于对数据进行查询,如select
- DML:数据库操作语言,对数据库进行增删改查,如:insert,update,delete
- TPL:事物处理语言,对事物进行处理,包括begin,transaction,commit,rollback
- DCL:数据控制语言,如grant,revoke
- DDL:数据定义语言:进行数据库,表的管理等,如create,drop
- CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
- sql是一门特殊的语言,专门用来操作关系型数据库
- 不区分大小写
七.表(Table) 特定类型数据的结构化列表
表是结构化的文件,用来存储特定类型的数据,表可能存储客户清单,产品目录,或者其他信息列表。
存储在表中的数据是一种类型的数据或一个列表,绝对不应该将顾客的列表信息和订单的列表信息存储到同一个数据库表中,这样做会使随后的数据检索和访问变得困难,代替的解决方案是创建两个表,在每个表中存储其相应的列表信息。
数据库中每个表都有一个名字来标识它,
并且在一个数据库中表名是唯一的。
列( Column): 表中的一个字段,表由一列或多列构成,列中存储表的一部分信息
每一列存储一条特定信息。例如在客户表中,一列存储客户编号,另一列存储客户姓名,
而地址,城 市,州,邮政编码存储在各自的列中。数据库中每一列都有相应的数据类型,
数据类型定义了该列可以存储哪种类型的数据。例如,如果某列要存储数字,就应该使用numeric数据类型。
如果某列存储日期,文本,提示,金额等 就需要用恰当的数据类型来指定。
行( Row):表中的一条记录
表中的数据存储在行里,把表当做类似电子表格的网格,在网格中垂直的列就是表的列 ,水平的行就是表的行。
例如,客户表可能在每一行存储一个客户,表中行的数量也就是表中记录的条数。
注: NULL 在SQL中NULL用来指代空值( no value),如果一列被定义为允许为NULL,
当插入或者更新行时,可以忽略该列的数据。
八.mariadb安装及使用
1.最新版本源:
[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
2. 下载启动:
——#yum install MariaDB -y
——#service mariadb restart
3.初始化:
——#mysql_secure_installation
#........................................
Enter current password for root (enter for none):(如果忘记密码,可直接回车更改新的密码)
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Remove anonymous users? [Y/n] y #移除匿名登录
... Success!
Disallow root login remotely? [Y/n] n #不容许远程超级用户登录
... skipping.
(后面全填“y”)
4.忘记mysql的root密码
——#vim /etc/my.cnf.d/server.cnf
——#vim /etc/my.cnf.d/server.cnf
......
[server]
skip-grant-tables #添加这一行
......
——#systemctl restart mariadb
——#mysql -uroot | mysql -u root -p
->use mysql
->update user set password=password('123') where user='root'
退出再进入配置文件注释掉 ‘skip-grant-tables’,重启mariadb即可
5.常见操作
——#mysqladmin --version #查看数据库版本
——#mysql -uroot -p123 #u:用户,p:密码。进入数据库。
>show databases; #查看数据库
>show create database mysql; #查看创建数据库状态
>use mysql #使用哪个库
>create database feige #创建数据库feige
>drop database feige #删除数据库
>alter database 库名 default character set=utf8; #修改数据库默认字符集支持中文
【用户管理】
>select user(); #查看当前用户
>grant select,create,update,delete on mysql.* to 'aaa'@'%'; #给aaa添加查询,创建,更新,删除的权限在mysql库的所有表上(在任意主机上)
root@‘%’:容许第三方登录
>grant all privileges on test03.grade to 'aaa'@'%';
#给aaa赋予test03数据库的grade表最高权限(在任意主机上)
>show grants for 'aaa'; #查看aaa用户的权限(root用户)
>revoke all on *.* from 'aaa'@'%'; #收回aaa在任意数据库的任意表的最高权限
>show grants; #查看权限
---------------------------------------------------分割线-----------------------------------------------------------------------------------------