数据库简介与 Mysql 服务基础_数据库的发展历程和最新应用-程序员宅基地

技术标签: oracle  mysql  linux运维  数据库  云计算  

前言

一、数据库系统发展史

第一代数据库

  • 自 20 世纪 60 年代起,第一代数据库系统问世
  • 是层次模型与网状模型的数据库系统
  • 为统—管理和共享数据提供了有力的支撑

第二代数据库

  • 20 世纪 70 年代初,第二代数据库——关系型数据库开始出现
  • 20 世纪 80 年代初,IBM 公司的关系型数据库系统 DB2 问世,开始逐步取代层次与网状模型的数据库,成为行业主流
  • 到目前为止,关系型数据库系统仍占领数据库应用的主要地位

第三代数据库

  • 自 20 世纪 80 年代开始,适应不同领域的新型数据库系统不断涌现
  • 面向对象的数据库系统,实用性强、适应面广
  • 20 世纪 90 年代后期,形成了多种数据库系统共同支撑应用的局面
  • —些新的元素被添加进主流数据库系统中
    例如:Oracle 支持的 < 关系 - 对象 > 数据库模型

二、数据库基本概念

数据(data)

  • 描述事物的符号记录
  • 包括数字,文字、图形、图像、声音、档案记录等
  • 如下表所示:每一行称为一条记录,用来描述一个对象的信息;每一列称为一个字段,用来描述对象的一个属性
姓名 年龄 存款
小红 19 2000
小刘 20 5000

表(table)

  • 将不同的记录组织在一起用来存储具体数据

数据库(database)

  • 表的集合,是存储数据的仓库
  • 以一定的组织方式存储的相互有关的数据集合

数据库管理系统(DBMS)

  数据库管理系统(DatabaseManagementSystem,DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作。

DBMS 的工作模式如下
在这里插入图片描述

接受应用程序的数据请求和处理请求
将用户的数据请求(高级指令)转换为复杂机器代码(底层指令)
实现对数据库的操作
从数据库的操作中接受查询结果
对查询结果进行处理(格式转换)
将处理结果返回给用户

DBMS主要包括以下功能

数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语义的错误数据被输入或输出。
数据操纵功能:包括数据查询统计和数据更新两个方面。
数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
通信功能:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行数据交换。

数据库系统(DBS)

  • 是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
  • 用户可以通过 DBMS 或应用程序操作数据库

三、主流数据库介绍

SQL Server(微软公司产品)
在这里插入图片描述

  • 面向 Windows 操作系统
  • 简单、易用

Oracle(甲骨文公司产品)
在这里插入图片描述

  • 面向所有主流平台
  • 安全、完善,操作复杂

DB2(IBM 公司产品)
在这里插入图片描述

  • 面向所有主流平台
  • 大型、安全、完善

MySQL(甲骨文公司收购)
在这里插入图片描述

  • 免费、开源、体积小

PostgreSQL(PostgreSQL Global Development Group维护)
在这里插入图片描述

  • 面向所有主流平台
  • 免费、开源、功能强大

GaussDB(华为公司产品)
在这里插入图片描述

  • 涵盖关系型、非关系型数据库服务
  • 可靠性、扩展性、备份恢复

OceanBase(蚂蚁集团产品)
在这里插入图片描述

  • 金融级分布式关系数据库
  • 数据强一致、高可用、高性能、在线扩展、高度兼容 SQL 标准和主流关系数据库、低成本

四、数据库类型

1. 关系型数据库

关系型数据库是基于关系模型的数据库系统
关系模型的数据结构使用简单易懂的二维数据表
关系模型可用简单的 “实体 - 关系”(E - R) 图来表示
E - R 图中包含了实体(数据对象)、关系和属性三个要素
所有实体及实体之间联系的集合构成了一个关系数据库

在这里插入图片描述

实体

  • 也称为实例,对应现实世界中可区别于其他对象的 “事件” 或 “事务”
  • 如上图的银行客户、银行账户

属性

  • 实体所具有的某一特性,一个实体可以有多个属性
  • 如上图的 “银行客户” 实体集中的每个实体均具有姓名、住址、电话等属性

联系

  • 实体集之间的对应关系称为联系,也称为关系
  • 如银行客户和银行账户之间存在 “储蓄” 的关系

二维数据表

关系数据库的存储结构是二维表格
在每个二维表中:

  • 每一行称为一条记录,用来描述一个对象的信息
  • 每一列称为一个字段,用来描述对象的一个属性

在这里插入图片描述

主键

  • 数据表中的每行记录都必须是唯一的,不允许出现完全相同的记录,通过定义主键(主关键字,Promary Key)可以保证记录(实体)的唯一性
  • 键,即关键字,它是关系模型中一个非常重要的元素
  • 主键唯一标识表中的行数据,一个主键值对应一行数据,主键由一个或多个字段组成,其值具有唯一性,不允许取空值(NULL)
  • 一个表只能有一个主键
  • 如果一个属性集能唯一地标识表的一行而又不含有多余的属性,那么这个属性集称为候选键
  • 表中可以有多个候选键,但是只能有一个候选键可以选做表的主键,所有其他候选键称为备用键
  • 例如下图,“编号”、“姓名”、“性别”、“年龄”、“专业编号” 都可以说是候选键,而可以定义 “编号” 为主键
编号 姓名 性别 年龄 专业编号
1 徐一 21 1
2 徐二 22 3
3 徐三 18 3
4 徐四 18 5

外键

  • 一个关系数据库通常包括多个表,通过外键(Foreign Key)可以使这些表关联起来
  • 外键是用于建立和加强两个表数据之间的链接的一列或多列,通过表中主键值得一列或多列添加到另一个表中,可创建两个表之间的链接,这个列就称为第二个表的外键
  • 如下表所示,字段 “专业编号” 是该表的主键,而上表中也有一个相同的字段 “专业编号”,则该字段称为外键
专业编号 专业
1 云计算运维
3 大数据开发
5 人工智能
  • 主键的表称之为 “主表”,外键的表称之为 "从表”
  • 主表和从表总是成对出现的,相互之间以 “外键” 形成关联

数据完整性规则

为了维护数据库中的数据与现实世界的一致性,关系数据库的数据与更新操作必须遵循下列四类完整性规则

  • 实体完整性规则
  • 域完整性规则
  • 引用完整性规则
  • 用户定义的完整性规则

数据完整性

关系型数据库的应用

关系型数据库 应用举例
Oracle、MySQL 12306 用户信息系统
SQL Server、Sybase 淘宝账号系统
Informix、access 联通手机号信息系统
DB2、FoxPRO 银行用户账号系统
PostgreSQL 网站用户信息系统

2. 非关系型数据库

简介

  • 非关系数据库也被称为 NoSQL(Not Only SQL)
  • 存储数据不以关系模型为依据,不需要固定的表格式
  • 常用的非关系数据库有:Redis、mongoDB 等

非关系数据库的优点

  • 数据库可高并发读写
  • 对海量数据高效率存储与访问
  • 数据库具有高扩展性与高可用性

对比关系型数据库

优势

  • 成本:nosql 数据库简单易部署,基本都是开源软件,不需要像使用 oracle 那样花费大量成本购买使用,相比关系型数据库价格便宜
  • 查询速度:nosql 数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及 nosql 数据库
  • 存储数据的格式:nosql 的存储格式是 key-value 形式、文档形式、图片形式等等,所以可以存储基础类型以及对象是集合等各种格式,而关系型数据库则只支持基础类型
  • 扩展性:关系型数据库有类似 join 这样的多表查询机制的限制导致扩展很难

劣势

  • 维护的工具和资料有限,因为 nosql 是属于新的技术,而关系型数据库出现已有十几年时间
  • 不提供对 sql 语句的支持,如果不支持 sql 这样的工业标准,将产生一定程度的学习和使用成本
  • 不提供关系型数据库对事物的处理

3. 时序数据库 TSD

  基于时间序列数据的特点,关系型数据库无法满足对时间序列数据的有效存储与处理,因此迫切需要一种专门针对时间序列数据来做优化的数据库系统,即时间序列数据库。
  时序数据库全称为时间序列数据库。时间序列数据库指主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

五、Mysql 数据库

1. MySQL 简介

  • MySQL 是一个真正的多线程、多用户的 SQL 数据库服务,凭借其高性能、高可靠和易于使用的特点,成为服务器领域中最受欢迎的开源数据库系统
  • 在 2008 年以前,MySQL 项目由 MySQL AB 公司进行开发、发布和支持,之后历经 Sun 公司收购 MySQL,Oracle 公司收购 Sun 公司的过程,目前 MySQL 项目由 Oracle 公司负责运营和维护

2. 商业版与社区版

  • MySQL 商业版是由 MySQL AB 公司负责开发与维护,需要付费才能使用
  • MySQL 社区版是由分散在世界各地的 MySQL 开发者、爱好者一起开发与维护,可以免费使用
  • 两者区别
    • 商业版组织管理与测试环节更加严格,会比社区版更稳定
    • 商业版不遵守 GPL,社区版遵从 GPL 可以免费使用
    • 商业版可获得 7*24 小时的服务,社区版则没有

3. 产品阵营

  • 第一阵营:5.0-5.1 阵营,可说是早期产品的延续
  • 第二阵营:5.4-5.7 阵营,整合了 MySQL AB 公司、社区和第三方公司开发的存储引擎,从而提高性能
  • 第三阵营:6.0-7.1 阵营,就是 MySQL Cluster 版本,为适应新时代对数据库的集群需求而开发

4. Mysql 特点

  • 性能卓越、服务稳定
  • 开源、无版权限制、成本低
  • 多线程、多用户
  • 基于 C/S 架构
  • 安全可靠

5. 源码编译安装

这里使用脚本一键执行,安装包放在我的云主机上

#!/bin/bash
#一键安装 mysql-5.7.17
#联网下载两个源码包,包在我的云主机上
#安装包下载在 /data 目录
#编译安装需较长时间,请耐心等待

mkdir /data
wget http://101.34.22.188/mysql-5.7.17/boost_1_59_0.tar.gz -P /data
wget http://101.34.22.188/mysql-5.7.17/mysql-5.7.17.tar.gz -P /data

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
ntpdate ntp1.aliyun.com
tar zxvf /data/mysql-5.7.17.tar.gz -C /opt
tar zxvf /data/boost_1_59_0.tar.gz -C /usr/local
mv /usr/local/boost_1_59_0 /usr/local/boost
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make git perl expat-devel pcre-devel pcre
useradd -s /sbin/nologin mysql
cd /opt/mysql-5.7.17/

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

cd /opt/mysql-5.7.17/
make -j 4 && make install
echo > /etc/my.cnf

cat > /etc/my.cnf<<EOF
[client]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
EOF

chown -R mysql.mysql /usr/local/mysql/
chown mysql.mysql /etc/my.cnf
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/bin/
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload && systemctl start mysqld && systemctl enable mysqld
ln -s /usr/local/mysql/bin/mysql /usr/local/sbin/


pgrep "mysqld" &> /dev/null
if [ $? -eq 0 ];then
        echo -e "\033[32mmysqld服务运行正常\033[0m"
else
        echo -e "\033[31mmysqld服务运行异常,请检查\033[0m"
fi
sleep 2
echo ' '
echo -e "\033[32mMySQL 没有设置密码,执行 mysql 命令登录\033[0m"

修改密码

mysqladmin -u root -p password "123456"
# 不需要登录,直接敲回车

授权远程登录

# 需要登录
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

6. Mysql 初步使用

数据库 ----> 数据表 -----> 行(记录):用来描述一个对象的信息
数据库 ----> 数据表 -----> 列(字段):用来描述对象的一个属性

(1) MySQL 常用数据类型

mysql 常用数据类型很多,这里列举几种:

int:整型
float:单精度浮点 4 字节 32 位
double:双精度浮点 8 字节 64 位
char:固定长度的字符类型
varchar:可变长度的字符类型
text:文本
image:图片
decimal(5,2)5 个有效长度数字,小数点后面有 2

MySQL 数据类型

(2) 查看当前服务器中的数据库

show databases;

在这里插入图片描述

(3) 查看数据库中包含的表

use <数据库名>;	#切换数据库
show tables;	#查看所有表
#可以合写
show tables in <数据库名>;

在这里插入图片描述
  MySQL 数据库的数据文件存放在 /usr/local/mysql/data 目录下,每个数据库对应一个子目录,用于存储数据表文件。每个数据表对应为三个文件,扩展名分别为:

.frm
.MYD
.MYI

(4) 查看表的结构

use <数据库名>;
describe <数据库名>.<表名>;
#describe 可缩写
desc <表名>;

在这里插入图片描述

(4) 创建新的数据库

create database <数据库名>;

在这里插入图片描述

(5) 创建新的表

  • create table 表名 (字段1 数据类型,字段2 数据类型,[…],parmary key (主键名));
  • 主键一般选择能代表唯一性的字段,不允许取空值(NULL),一个表只能有一个主键
CREATE TABLE web_demo (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT '',PRIMARY KEY (id));

在这里插入图片描述

(6) 删除指定的数据表

drop table <数据库名>.<表名>;
#不 use 进入库中需加上数据库名

在这里插入图片描述

(7) 删除指定的数据库

drop database <数据库名>;

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shenyuanhaojie/article/details/120860061

智能推荐

Java实现非递归归并排序-程序员宅基地

文章浏览阅读240次。public class nonRecursiveMergeSort {public static void main(String[] args) { int[] list = {8,4,3,6,9}; MergeSort(list); for(int num:list) System.out.print(num);}public sta..._java 归并排序非递归

OpenWrt常见问题汇总_openwrt没有路由器的型号-程序员宅基地

文章浏览阅读4.8k次。目录1.***error:'OpenWrtunknown'istoolong,maxfirwareversionlengthis132.DownLoad failed3.OpenWrt的Target Profile找不到自己的路由器型号 4.编译错误you should not run configure as root (set FORCE_..._openwrt没有路由器的型号

source insight 工程项目路径替换_source insight 4.x 替换文件-程序员宅基地

文章浏览阅读1.1k次。然后切换到sourceinsight,刚才的弹窗还在,点击Addfromlist按钮,选择刚才完成路径替换的.txt文件,等待导入完成,至此,完成路径替换,又不用再添加一遍文件。Project->AddandRemoveProjectFiles->RemoveAll,移除原来所有文件,完毕后,当前弹窗别关。Project->ExportProjectFileList,点保存.txt文件。找到刚才保存的.txt文件位置,打开并批量替换路径。..._source insight 4.x 替换文件

java做一个文件存储回滚的实现_java中文件可以回滚吗-程序员宅基地

文章浏览阅读798次。思路:操作任意表之前,先对表做备份,如果出了异常,那么还原备份。采用kv存储 nosql存储main函数:public class TestDemo { public static void main(String[] args) { // 数据初始化 Car car = new Car(); car.setCarAge("0"); car.setCarBirth("2022-01-30"); car.setC_java中文件可以回滚吗

display: weston: opaque region笔记_pixman_region32_intersect-程序员宅基地

文章浏览阅读1.1k次。client的设置方法:region = wl_compositor_create_region(window->display->compositor);wl_region_add(region, 0, 0, window->geometry.width, window->geometry.height);wl_surface_set_opaque_region(window->surface, region);wl_region_de_pixman_region32_intersect

matlab double to int,如何将matlab中的sym数据类型转换为double型-程序员宅基地

文章浏览阅读7.7k次。满意答案a19850429推荐于 2016.11.30采纳率:47%等级:8已帮助:862人一般来说用dec2hex及hex2dec就可以。ss='010600001388849C';ssDec = hex2dec(ss);ssHex = dec2hex(ssDec);format hex;disp(ssHex);不过前提是你的机器能处理这么大的数。我用小一点的数比如说ss='01600..._matlab将sym类型变为double类型

随便推点

【Mac使用技巧】Mac中文输入法打不出来句号_mac打不出来中文句号-程序员宅基地

文章浏览阅读2.2w次,点赞17次,收藏3次。解决办法:点击导航栏里的输入法, 找到use halfwidth punctuation ,如果有勾, 取消选中就行了。此文章本人原创,如有问题底部留言,如有转载请标明出处。--HurryChen Happy Coding! *\( ^ v ^ )/*..._mac打不出来中文句号

腾讯信鸽推送(七):魅族推送通道配置_信鸽 魅族推送-程序员宅基地

文章浏览阅读328次。后台不知道填写的魅族appid是哪个? 腾讯信鸽后台填写的是6位数的appid,如下图所示 需要腾讯信鸽插件请联系企业即时通讯-触点通QQ:1417249367..._信鸽 魅族推送

python-pcl文档_python-pcl 学习教程-程序员宅基地

文章浏览阅读765次。https://python-pcl-fork.readthedocs.io/en/latest/tutorial/_python-pcl 学习教程

Taro/TraoUI框架使用过程中的一些坑-程序员宅基地

文章浏览阅读7.8k次。使用TaroUI组件 @import样式不好使 / 不能够覆盖样式问题Textarea 组件层级穿透问题_traoui

libVLC提取视频帧及自定义读取媒体文件_libvlc_video_set_callbacks-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏26次。hello诶喂八滴跟我一起嗨嗨嗨。。。,阿循今天给大家分享一下最近在学习的开源视频播放器vlcplayer的一些心得,我这边是要把这个弄到Unity里去用,因此提取视频帧和自定义读取是很关键的功能点,前者可以拿到数据给unity渲染,后者可以在C#层面去做数据功能模块,开发效率美滋滋。libvlc是vlc的开发者库,它的播放器也是通过libvlc实现的,我们这里用到了C++,不过也是有C#绑定..._libvlc_video_set_callbacks

为 Windows Phone 8.1 app 解决“The type does not support direct content.”的问题-程序员宅基地

文章浏览阅读342次。我在 VS 14 CTP 中新建了一个空的 app store 项目名叫 PlayWithXaml ,项目的 MainPage.xaml 文件改为了以下内容:<Page x:Class="PlayWithXaml.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat..._the type window not support direct content

推荐文章

热门文章

相关标签