数据库简介与 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 <数据库名>;

在这里插入图片描述

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

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

(0)
上一篇 2022年7月27日 上午6:46
下一篇 2022年7月27日 上午7:00


相关推荐

  • 关于 PyXLL的使用问题

    关于 PyXLL的使用问题2021 年 1 月 13 日 国内某著名安全团队监测到一种名为 incaseformat 的蠕虫病毒在国内爆发 该蠕虫病毒执行后会自复制到系统盘 Windows 目录下 并创建注册表自启动 一旦用户重启主机 使得病毒母体从 Windows 目录执行 病毒进程将会遍历除系统盘外的所有磁盘文件进行删除 对用户造成不可挽回的损失 目前 已发现国内多个区域不同行业用户遭到感染 病毒传播范围暂未见明显的针对性 该安全团队还为全网用户提供免费查杀工具 可下载如下工具 进行检测查杀

    2026年3月26日
    2
  • HUE基础入门

    HUE基础入门HUE 是一个开源的 ApacheHadoop 系统 早期由 Cloudera 开发 后来贡献给开源社区 它是基于 PythonWeb 框架 Django 实现的 通过使用 Hue 我们可以通过浏览器方式操纵 Hadoop 集群 例如 put get 执行 MapReduceJob 等等 学习网站 http gethue comhttps github com cloude

    2026年3月17日
    2
  • mysql一主多从 读写分离_MySQL主从复制原理

    mysql一主多从 读写分离_MySQL主从复制原理文章目录前言一、基本概念1.读写分离(1)什么是读写分离(2)为什么要读写分离(3)什么时候要读写分离(4)主从复制与读写分离2.MySQL主从复制(1)mysql支持的复制类型(2)主从复制的工作过程(3)mysql主从复制高延迟的原因(4)mysql主从复制高延迟的解决办法3.常见的MySQL读写分离方式(1)基于程序代码内部实现(2)基于中间代理层实现二、MySQL主从复制架构搭建1.服务器配置2.实验前准备3.mysql主从服务器时间同步4.主服务器

    2022年8月13日
    7
  • Android物联网应用程序开发(智慧园区)—— 设置传感器阈值对话框界面

    Android物联网应用程序开发(智慧园区)—— 设置传感器阈值对话框界面效果图:自定义对话框布局:<?xmlversion=”1.0″encoding=”utf-8″?><LinearLayoutxmlns:android=”http://schemas.android.com/apk/res/android”android:layout_width=”350dp”android:layout_height=”wrap_content”andro

    2022年6月21日
    23
  • Android移动应用程序开发

    Android移动应用程序开发

    2021年10月2日
    275
  • 大数据开发和java开发有什么不同?

    大数据开发和java开发有什么不同?最近发现有些同学并不太了解大数据开发工程师这个职位,所以想简单介绍一下什么是大数据开发工程师,当前互联网公司的数据开发到底是什么样子的?和一般的Java或者PHP工程师在工作上有什么区别?什么不是大数据开发?仅使用数据库(关系型mysql,sqlserver,oracle等非关系型mongoredis等),尽管数据量达到千万级别,亿级别不是大数据开发。从业务系统的数据库中查询数据…

    2022年5月27日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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