数据库简介与 Mysql 服务基础「建议收藏」

数据库简介与 Mysql 服务基础「建议收藏」文章目录一、数据库系统发展史二、数据库基本概念一、数据库系统发展史第一代数据库自20世纪60年代起,第一代数据库系统问世是层次模型与网状模型的数据库系统为统—管理和共享数据提供了有力的支撑第二代数据库20世纪70年代初,第二代数据库——关系型数据库开始出现20世纪80年代初,IBM公司的关系型数据库系统DB2问世,开始逐步取代层次与网状模型的数据库,成为行业主流到目前为止,关系型数据库系统仍占领数据库应用的主要地位第三代数据库自20世

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

一、数据库系统发展史

第一代数据库

  • 自 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 <数据库名>;

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164615.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 六十四卦详细解释_六十四卦断事

    六十四卦详细解释_六十四卦断事文章目录第1卦 乾为天(乾卦) 刚健中正 上上卦第2卦 坤为地(坤卦) 柔顺伸展 上上卦第3卦 水雷屯(屯卦) 起始维艰 下下卦第4卦 山水蒙(蒙卦) 启蒙奋发 中下卦第5卦 水天需(需卦) 守正待机 中上卦第6卦 天水讼(讼卦) 慎争戒讼 中下卦第7卦 地水师(师卦) 行险而顺 中上卦第8卦 水地比(比卦) 诚信团结 上上卦第9卦 风天小畜(小畜卦) 蓄养待进 下下卦第10卦 天泽履(履卦) 脚…

  • BroadcastReceive基础知识总结「建议收藏」

    BroadcastReceive基础知识总结「建议收藏」1、普通广播2、有序广播3、粘性广播4、电量、开机广播

  • 程序员为什么不喜欢去做外包_外包程序员的出路

    程序员为什么不喜欢去做外包_外包程序员的出路做IT的一定对于外包公司很熟悉,就算没做过,想必也是经常听说,说实话在行业内是存在鄙视链的,而外包公司往往在最低端。很多人都在四处问:“软件外包公司到底能不能去”?到底能不能学到真正的技术?我来为大家详细梳理一下这个问题。想要知道外包公司到底值不值得去,我们就应该了解外包公司的概念是什么?不仅仅是IT行业有软件外包公司,在很多行业中,外包公司的数量也都是最多的。外包的工作形式分为两种:‍外包公司承接甲方的项目,了解需求后拿回自己的公司做项目,程序员按照客户的需求把代码写好,最终完成项目,外包

  • 大数据教程:Transformation和Action算子演示

    大数据教程:Transformation和Action算子演示大数据教程:Transformation和Action算子演示

  • Java开发手册之日志规约[通俗易懂]

    Java开发手册之日志规约[通俗易懂]Java开发手册之日志规约

  • 心情不好的时候,用 Python 画棵樱花树送给自己吧「建议收藏」

    心情不好的时候,用 Python 画棵樱花树送给自己吧「建议收藏」最近发生了很多事情,工作不开心,爱情无果而终,身边的小伙伴陆陆续续离职。虽然都不是会一下子击垮自己的事情,但是积攒起来,还是会有突然感到疲惫和倦怠的时候,有一种不知道下一步要走向哪里的无力感。在这个城市留下了很多的回忆,但是身边的人一个个离开,走到现在,似乎没有太多留恋的了,也没想好未来要去哪里。自己是一个始终需要新鲜感的人,在这里停留了太久,大概到了该说再见的时候了吧。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号