数据库简介
数据库发展阶段
萌芽阶段-----文件系统
使用磁盘文件来存储数据初级阶段-----第一代数据库
出现了网状模型、层次模型的数据库中级阶段-----第二代数据库
关系型数据库和结构化查询语言高级阶段------新一代数据库
“关系-对象”型数据库
文件系统缺点
编写应用程序不方便
数据冗余不可避免
应用程序依赖性
不支持对文件的并发访问
数据间联系弱
难以按用户视图表示数据
无安全控制功能
数据库管理系统
DataBase Management System
数据库是数据的汇集,它以一定的组织形式存于存储介质上
DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心。
DBA:负责数据库的规划、设计、协调、维护和管理等工作
应用程序指以数据库为基础的应用程序。
数据库管理系统的基本功能
数据定义
数据处理
数据安全
数据备份
数据库管理系统的优点
相互关联的数据的集合
较少的数据冗余
程序与数据相互对立
保证数据的安全、可靠
最大限度地保证数据的正确性
数据可以并发使用并能同时保证一致性
数据库系统的架构
单机架构
大型主机/终端架构
主从式架构(C/S)
分散式架构
关系型数据库
RDBMS类型
MySQL: MySQL, MariaDB, Percona Server
PostgreSQL: 简称为pgsql,EnterpriseDB
Oracle:
MSSQL:
DB2:
术语介绍
关系 :关系就是二维表。并满足如下性质:
表中的行、列次序并不重要。
- 行row:表中的每一行,又称为一条记录。
- 列column:表中的每一列,称为属性,字段。
- 主键(Primary key):用于惟一确定一个记录的字段。
- 域domain:属性的取值范围 。
事物
事务transaction:多个操作被当作一个整体对待
ACID:
A: 原子性
C: 一致性
I: 隔离性
D: 持久性
实体-联系模型 E-R
-
实体
客观存在并可以相互区分的客观事物或抽象事件称为实体。
在E-R图中用矩形框表示实体,把实体名写在框内 -
属性
实体所具有的特征或性质 -
联系
联系是数据之间的关联集合,是客观存在的应用语义链 。在E-R图中,实体之间的联系用菱形框表示
- 实体内部的联系:指组成实体的各属性之间的联系。
- 实体之间的联系:指不同实体之间联系。
-
联系类型
一对一联系(1:1)
一对多联系(1:n)
多对多联系(m:n)
多对多的联系需要注意
数据三要素
-
数据结构:
包括两类,一类是与数据类型、内容、性质有关的对象,比
如关系模型中的域、属性和关系等;另一类是与数据之间联
系有关的对象,它从数据组织层表达数据记录与字段的结构 -
数据的操作
数据提取:在数据集合中提取感兴趣的内容。(SELECT)
数据更新:变更数据库中的数据。( INSERT、DELETE、UPDATE ) -
数据的约束条件 :是一组完整性规则的集合
实体(行)完整性: Entity integrity 域(列)完整性: Domain Integrity 参考完整性: Referential Integrity
数据库设计-简易规划
- 第一阶段:收集数据,得到字段
收集必要且完整的数据项
转换成数据表的字段 - 第二阶段:把字段分类,归入表,建立表的关联
关联:表和表间的关系
分割数据表并建立关联的优点
节省空间
减少输入错误
方便数据修改 - 第三阶段:
规范化数据库
数据库的正规化分析
-
RDMBS设计范式基础概念
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 -
目前关系数据库有六种范式
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)即可 -
范式介绍
范式的本质是减少数据冗余,并不一定要严格按照范式设计。
-
1NF
每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列
-
2NF
第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK。非PK的字段需要与整个PK有直接相关性
-
3NF
满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
-
SQL: Structure Query Language
结构化查询语言;SQL解释器:
-
数据存储协议:应用层协议,C/S
-
S:server, 监听于套接字,接收并处理客户端的应用请求
-
C:Client
-
程序接口
CLI
GUI -
应用编程接口
ODBC:Open Database Connectivity
JDBC:Java Data Base Connectivity
-
-
约束: constraint
表中的数据要遵守的限制
-
主键
一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能存在一个
复合主键 Composite primary key
-
惟一键
一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个
-
外键
一个表中的某字段可填入的数据取决于另一个表的主
键或唯一键已有的数据 -
检查
字段值在一定范围内
基本概念
-
索引:将表中的一个或多个字段中的数据复制一份另存,并且此些需要按特定次序排序存储
-
关系运算
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联
数据模型
- 数据抽象:
物理层:决定数据的存储格式,即RDBMS在磁盘上如何组织文件
逻辑层:描述存储什么数据,以及数据间存在什么样的关系
视图层:描述DB中的部分数据 - 关系模型的分类:
关系模型
基于对象的关系模型
半结构化的关系模型:XML数据
Mysql安装
本文实际安装的是MariaDB,后续补充安装配置 Percona Server
Mysql和MariaDB历史
忽略
LAMP Architecture
MySQL Architecture.png安装和使用MariaDB
-
安装方式
源代码:编译安装
二进制包:展开至特定路径,并经过简单配置后即可使用 -
CentOS安装MariaDB
CentOS 7 直接提供 mariadb包组
CentOS 6 默认提供的mysql包,需手动下载
MariaBD特性
单进程,多线程
插件式存储引擎:存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择
存储引擎也称之为“表类型”
-
更多的存储的存储引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
Mysql5.5.8开始innoDB引擎是MYSQL默认引擎,InnoDB对比MyISAM的最大特点就是InnoDB支持事务tokuDB引擎与InnoDB引擎比较
-
诸多扩展和新特性
-
提供了较多测试组件
-
开源
yum安装MariaDB ( CentOS7 )
MariaDB包组与配置文件
Centos7的MariaDB数据库包括两个包组:
mariadb
mariadb-client
-
mariadb包组
mariadb-server: mandatory package mariadb-bench: optional package mariadb-test: optional package
-
mariadb-client包组
Mariadb: mandatory package MySQL-python: default package mysql-connector-odbc: default package libdbi-dbd-mysql: optional package mysql-connector-java: optional package perl-DBD-MySQL: optional package
注意:mariadb组和mariadb-client组中的mariadb rpm包不是一个概念
-
配置文件:
/etc/my.cnf /etc/my.cnf.d/ *.cnf
安装以及初始化
-
安装
yum groupinstall mariadb mariadb-client systemctl start mariadb systemctl enable mariadb
MariaDB Database Client
MariaDB Database Server
-
提高安全性
mysql_secure_installation #执行脚本,配置选项 设置数据库管理员root口令 禁止root远程登录 删除anonymous用户帐号 删除test数据库
配置MariaDB
-
端口以及IP绑定
侦听3306/tcp端口可以在绑定有一个或全部接口IP上
/etc/my.cnf文件[mysqld]加一行:skip-networking=1 只侦听本地客户端, 所有和服务器的交互都通过一个socket实现,socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改.
待补充
-
防火墙配置
firewall-cmd --permanent --add-service=mysql firewall-cmd --reload #或直接关闭禁用防火墙 systemctl disable firewalld systemctl stop firewalld
没什么技术含量
二进制包安装MariaDB ( CentOS6 )
参考:https://mariadb.com/kb/zh-cn/installing-mariadb-binary-tarballs/
安装准备工作
- 下载安装包
-
规划安装路径
/app/data
-
创建系统用户
groupadd -r -g 306 mysql useradd -r -g 306 -u 306 mysql chown mysql:mysql /app/data #注意权限
-
安装二进制包
tar xf mariadb-VERSION-linux-x86_64.tar.gz -C /usr/local cd /usr/local ln -sv mariadb-VERSION mysql chown -R root:mysql /usr/local/mysql/ /usr/local/mysql/scripts/mysql_install_db --datadir=/app/data --user=mysql
注意:-C /usr/local 必须是此位置
注意:软链接 多加一个斜线,因为是软链接
chown -R root:mysql /usr/local/mysql
会出错 -
配置文件
#创建my.cf配置文件
mkdir /etc/mysql/
cd /usr/local/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf
[mysqld]中添加三个选项:
datadir = /mydata/data //指定数据库目录
innodb_file_per_table = on //每个表单独一个数据库文件
skip_name_resolve = on //禁止主机名解析
#创建数据库文件和日志文件
/usr/local/mysql/scripts/mysql_install_db --datadir=/app/data --user=mysql
touch /var/log/mysqld.log
chown mysql /var/log/mysqld.log
#创建服务启动脚本,并启动mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#执行mysql初始化操作并登陆
/usr/local/mysql/bin/mysql_secure_installation
/usr/local/mysql/bin/mysql -uroot -p
#添加环境变量
vim /etc/profile.d/my.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/my.sh
MariaDB程序
MariaDB的程序组成:
-
Client
mysql:CLI交互式客户端程序;
mysqldump, mysqladmin... -
Server:
mysqld_safe
mysqld
mysqld_multi:多实例 -
服务器监听的两种socket地址
ip socket: 监听在tcp的3306端口,支持远程通信
unix sock: 监听在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),仅支持本机通信
server: localhost, 127.0.0.1 自动使用unix sock
命令行交互式客户端程序: mysql
-
mysql选项:
-uUSERNAME: 用户名;默认为root -hHOST: 服务器主机; 默认为localhost -pPASSWORD:用户的密码;建议使用-p,默认为空密码
-
mysql用户账号由两部分组成:
'USERNAME'@'HOST'Current user: root@localhost
HOST用于限制此用户可通过哪些远程主机连接mysql服务
注意:USERNAME与HOST组合在一起,才是完整的mysql账号
支持使用通配符:
%: 匹配任意长度的任意字符 _: 匹配任意单个字符
172.16.0.0/16 或 172.16.%.%
执行命令
-
运行mysql命令:默认空密码登录
mysql>use mysql #不用加';' mysql>select user(); #查看当前用户 mysql>SELECT User,Host,Password FROM user;
-
安全初始化
/usr/local/mysql/bin/mysql_secure_installatoin
-
登录系统
mysql –uroot –p
-u与用户名需要连着写
-
客户端命令:本地执行
mysql> help mysql> status 或 \s #每个命令都完整形式和简写格式
-
服务端命令
通过mysql协议发往服务器执行并取回结果,每个命令都加上必须命令结束符号;默认为分号
SELECT VERSION();
关系型数据库常见组件
数据库: database
表: table
行: row
列: column
索引: index
视图: view
用户: user
权限: privilege
存储过程: procedure,过程无返回值
存储函数: function,过程有返回值
触发器: trigger
事件调度器: event scheduler,任务计划
网友评论