数据库管理系统
数据库系统是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。
-
功能
数据库管理系统(DBMS)的基本功能有以下几项:
- 数据定义功能:DBMS提供相应数据语言来定义(DDL)数据库结构,它们是刻画数据库框架,并被保存在数据字典中
- 数据存取功能:DBMS提供数据操纵语言(DML),实现对数据库数据的基本存取操作:检索,插入,修改和删除
- 数据库运行管理功能:DBMS提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效
- 数据库的建立和维护功能:包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能
- 数据库的传输:DBMS提供处理数据的传输,实现用户程序与DBMS之间的通信,通常与操作系统协调完成
-
概念
关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名
元组:可以理解为二维表中的一行,在数据库中经常被称为记录
属性:可以理解为二维表中的一列,在数据库中经常被称为字段
域:属性的取值范围,也就是数据库中某一列的取值限制
关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成
关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中通常称为表结构
-
完整性
实体(行)完整性
体完整性指表中行的完整性。要求表中的所有行都有唯一的标识符,称为主关键字。主关键字是否可以修改,或整个列是否可以被删除,取决于主关键字与其他表之间要求的完整性
域(列)完整性
域完整性是对数据表中字段属性的约束,通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。限制数据类型,缺省值,规则,约束,是否可以为空,域完整性可以确保不会输入无效的值.
参考完整性
参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有效值,或者是 NULL
-
约束
- 主键约束(Primay Key Coustraint) 唯一性,非空性
- 唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
- 默认约束 (Default Counstraint) 该数据的默认值
- 外键约束 (Foreign Key Counstraint) 需要建立两表间的关系
- 非空约束(Not Null Counstraint):设置非空约束,该字段不能为空
-
关系型数据库优缺点
关系型数据库的优势
- 保持数据的一致性(事务处理)
- 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
- 可以进行Join等复杂查询
其中能够保持数据的一致性是关系型数据库的最大优势
关系型数据库的不足
- 不擅长的处理
- 大量数据的写入处理
- 为有数据更新的表做索引或表结构(schema)变更
- 字段不固定时应用
- 对简单查询需要快速返回结果的处理
-
范式
第一范式(1NF)
数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性
第二范式(2NF)
满足1NF后要求表中的所有列,都必需依赖于主键,而不能有 任何一列与主键没有关系(一个表只描述一件事情)
第三范式(3NF)
满足2NF后,要求表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)
MariaDB的安装
-
yum源安装
配置 yum 仓库
[root@CentOS75 ~]# cat /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
检查 yum 仓库,成功后安装 mariadb-server
[root@CentOS74 ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base base 9,591
epel epel 12,647
mariadb MariaDB #确认配置成功 68
repolist: 22,306
[root@CentOS74 ~]# yum install mariadb-server.x86_64 -y
-
二进制安装
首先确保主机的状态,保证该主机当前没有安装 MySQL 数据库
从 MariaDB 的官网上下载需要版本的二进制安装包,并根据官方文档说明进行安装
- 以 mariadb-10.2.17 为例:
安装
创建 mysql 用户
[root@CentOS75 ~]# useradd -d /data/mysql -r -s /sbin/nologin -m mysql
将下载好的 MariaDB 打包文件解压至 /usr/local/ 目录下
[root@CentOS75 ~]# tar xvfp mariadb-10.2.17-linux-glibc_214-x86_64.tar.gz -C /usr/local/
修改解压后文件的属性,并创建软连接
[root@CentOS75 ~]# chown -R root:root /usr/local/mariadb-10.2.17-linux-glibc_214-x86_64/
[root@CentOS75 ~]# ln -s /usr/local/mariadb-10.2.17-linux-glibc_214-x86_64/ /usr/local/mysql
将 /usr/local/mysql/bin 路径保存至 PATH 变量中
echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile.d/env.sh
进入 /usr/local/mysql 目录,执行安装脚本
[root@CentOS75 mysql]# ./scripts/mysql_install_db --datadir=数据存放目录 --user=执行身份
配置
参考 /usr/local/mysql/support-files 目录中的配置文件模板,选择合适的模板并生成配置文件
[root@CentOS75 support-files]# cp my-huge.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
修改 /etc/my.cnf 配置文件,在 [mysqld] 配置段中添加 datadir 选项
datadir = /data/mysql
参考 /usr/local/mysql/support-files 目录中的启动脚本 mysql.server ,在 /etc/init.d/ 生成启动脚本
[root@CentOS75 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@CentOS75 ~]# chkconfig --add mysqld
[root@CentOS75 ~]#⮀⮀chkconfig --list mysqld
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
启动 mariadb-server
[root@CentOS75 ~]# systemctl start mysqld
[root@CentOS75 ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 80 :::3306 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
执行 mysql_secure_installation 脚本,配置 mariadb 的基础安全内容
mysql客户端
-
客户端命令
命令 | 快捷命令 | 说明 |
---|---|---|
? | \? | “help”的同义词 |
clear | \c | 清除当前输入语句 |
connect | \r | 重新连接到服务器。可选的参数是 db 和 host |
delimiter | \d | SET 语句定界符 |
edit | \e | 编辑命令 |
ego | \G | 向 MySQL 服务器发送命令,垂直显示结果 |
exit | \q | 退出 mysql。与"quit"相同 |
go | \g | 发送命令到MySQL服务器 |
help | \h | 显示此帮助 |
nopager | \n | 禁用 pager,打印到 STDOUT |
notee | \t | 不写入外部文件 |
pager | \P | 使用 pager |
\p | 打印当前命令 | |
prompt | \R | 改MySQL提示符 |
quit | \q | 退出mysql |
rehash | \# | 重建 hash |
source | \. | 执行SQL脚本文件。将文件名作为参数 |
status | \s | 从服务器获取状态信息 |
system | \! | 执行系统 shell 命令 |
tee | \T | 将所有输出重定向值外部指定文件中 |
use | \u | 使用另一个数据库。将数据库名称作为参数 |
charset | \C | 切换到另一字符集 |
warnings | \W | 每个语句之后显示警告 |
nowarning | \w | 在每个语句之后不显示警告 |
选项:
-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e “SQL“ 执行SQL命令
-V, --version 显示版本
-v --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置