Mysql基础

66 阅读17分钟

前言

人们通过长期的学习,能够很轻松的识别除汉字,字符。可是计算机不能是别,于是人们在每一个计算机语言里都界定了数据类型,他可以是字符型、数值型、日期时间型还有混合型,有了这些数据类型,计算机很容易读取数据。在SQL中,数据类型是一个标签,是一个有利于SQL掌握每列中期望储存什么类型的数据的手册,它也标志了SQL怎样与储存的数据进行交互。SQL中常见的数据类型有多种,本文便介绍一下SQL中基本的数据类型。

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

在数据库的发展历史上,数据库先后经历了层次数据库、网状数据库和关系数据库等各个阶段的发展,数据库技术在各个方面的快速的发展。特别是关系型数据库已经成为目前数据库产品中最重要的一员,80年代以来, 几乎所有的数据库厂商新出的数据库产品都支持关系型数据库,即使一些非关系数据库产品也几乎都有支持关系数据库的接口。这主要是传统的关系型数据库可以比较好的解决管理和存储关系型数据的问题。随着云计算的发展和大数据时代的到来,关系型数据库越来越无法满足需要,这主要是由于越来越多的半关系型和非关系型数据需要用数据库进行存储管理,以此同时,分布式技术等新技术的出现也对数据库的技术提出了新的要求,于是越来越多的非关系型数据库就开始出现,这类数据库与传统的关系型数据库在设计和数据结构有了很大的不同, 它们更强调数据库数据的高并发读写和存储大数据,这类数据库一般被称为NoSQL(Not only SQL)数据库。 而传统的关系型数据库在一些传统领域依然保持了强大的生命力。

查看当今数据库使用情况排名:

Snipaste_2022-10-19_15-08-35.png DB-Engines Ranking - popularity ranking of database management systems

数据库系统发展史

  1. 第一代数据库
  • 自20世纪60年代起,第一代数据库系统问世
  • 是层次模型与网状模型的数据库系统
  • 为统一管理和共享数据提供了有力的支撑
  1. 第二代数据库
  • 20世纪70年代初,第二代数据库——关系数据库开始出现
  • 20世纪80年代初,IBM公司的关系数据库系统DB2问世,开始逐步取代层次与网状模型的数据库,成为行业主流
  • 到目前为止,关系数据库系统仍占领数据库应用的主要地位
  1. 第三代数据库
  • 自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现
  • 面向对象的数据库系统,实用性强、适应面广
  • 20世纪90年代后期,形成了多种数据库系统共同支撑应用的局面
  • —些新的元素被添加进主流数据库系统中:例如,Oracle支持的(“关系-对象”数据库模型)

当今主流数据库介绍

  1. SQL Server(微软公司产品)
    面向Windows操作系统
    简单、易用
  2. Oracle(甲骨文公司产品)
    面向所有主流平台
    安全、完善,操作复杂
  3. DB2 (IBM公司产品)
    面向所有主流平台
    大型、安全、完善
  4. MySQL(甲骨文公司收购)
    免费、开源、体积小

数据库分类

Snipaste_2022-10-19_15-07-54.png

关系型数据库

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

所有实体及实体之间联系的集合构成一个关系数据库。

关系型数据库介绍

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

实体:
也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物。
如银行客户、银行账户等。

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

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

关系型数据库的存储结构 : 关系型数据库的存储结构是二维表格。

在每个二维表中:

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

关系型数据库的优点:

  1. 易于维护:都是使用表结构,格式一致;
  2. 使用方便:SQL语言通用,可用于复杂查询;
  3. 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。

关系型数据库的缺点:

  1. 读写性能比较差,尤其是海量数据的高效率读写;
  2. 固定的表结构,灵活度稍欠;
  3. 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

关系型数据库应用

关系型数据库

  • Oracle,MySQL
  • SQLServer、Sybase
  • Informix、access
  • DB2、FoxPRO

应用举例

  • 12306用户信息系统
  • 淘宝账号系统
  • 联通手机号信息系统
  • 银行用户账号系统
  • 网站用户信息系统

非关系型数据库

NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。

NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可。

分类

非关系数据库大部分是开源的,实现比较简单,大都是针对一些特性的应用需求出现的。根据结构化方法和应用场景的不同,分为以下几类。

  1. 面向高性能并发读写的key-value数据库
    主要特点是具有极高的并发读写性能,例如Redis、Tokyo Cabint等。
  2. 面向海量数据访问的面向文档数据库
    特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.
  3. 面向可拓展的分布式数据库
    解决的主要问题是传统数据库的扩展性上的缺陷。

非关系型数据库介绍:

  1. 非关系数据库也被称作NoSQL (Not Only SQL)
  2. 存储数据不以关系模型为依据,不需要固定的表格式。

noSQL数据库类型

常用的非关系数据库:

  • Redis、Memcache:缓存型数据库
  • mongoDB:文档型数据库
  • Elasticsearch(ES):索引型数据库

文档数据库——这些数据库通常将每个键与称为文档的复杂数据结构配对。文档可以包含键数组对、键值对甚至嵌套文档。示例:MongoDB、Apache CouchDB、ArangoDB、Couchbase、Cosmos DB、IBM Domino、MarkLogic、OrientDB。
键值存储——每个单独的项都存储为键值对。键值存储是所有NoSQL数据库中最简单的数据库。示例:Redis, Memcached, Apache Ignite, Riak。
宽列存储——这些类型的数据库针对大型数据集上的查询进行了优化,它们将数据列存储在一起,而不是行。示例:Cassandra,Hbase,Scylla。
图形存储——这些存储关于图形、网络的信息,例如社会关系、路线图、交通链接。示例:Neo4j,AllegroGraph。

2019最佳NoSQL数据库

MongoDB:是一个面向文档的开源NoSQL数据库。MongoDB使用JSON之类的文档来存储任何数据。它是用c++写的。
Cassandra:是Facebook为收件箱搜索开发的。Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。
Redis:是最著名的键值存储。Redis是用C语言编写的。它是根据BSD授权的。
HBase:是谷歌为BigTable数据库设计的分布式非关系数据库。
Neo4j:称为原生图数据库,因为它有效地实现了属性图模型,一直到存储层。
Oracle NoSQL:实现了从用户定义的键到不透明数据项的映射。
Amazon DynamoDB:使用了一个NoSQL数据库模型,它是非关系型的,允许文档、图形和列在它的数据模型之间。
Couchbase:是一个用于交互式web应用程序的NoSQL文档数据库。它具有灵活的数据模型,易于扩展,提供一致的高性能。
Memcached:是一个开源、高性能、分布式内存缓存系统,旨在通过减少数据库负载来加速动态web应用程序。
CouchDB:是一个开源的NoSQL数据库,使用JSON存储信息,JavaScript作为查询语言。

非关系型数据库的优点:

  1. 数据库可高并发读写。
  2. 对海量数据高效率存储与访问。
    nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘
  3. 数据库具有高扩展性与高可用性。
  4. 成本低:nosql数据库部署简单,基本都是开源软件。
  5. 格式灵活
    存储数据的格式可以是key/value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。

非关系型数据库的缺点:

1不提供sql支持,学习和使用成本较高;
2无事务处理;
3数据结构相对复杂,复杂查询方面稍欠。
4但是由于Nosql约束少,所以也不能够像sql那样提供where字段属性的查询。因此适合存储较为简单的数据。有一些不能够持久化数据,所以需要和关系型数据库结合。

MySQL数据库介绍

Snipaste_2022-10-19_15-08-44.png

MySQL是一个关系型数据库管理系统 由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

MySQL数据库介绍

  1. MySQL是一款深受欢迎的开源关系型数据库。
  2. 是Oracle旗下的产品。
  3. 遵守GPL协议,可以免费使用与修改。

特点:

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

MySQL商业版与社区版

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

MySQL产品阵营

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

下载网址:www.dev.mysql.com/downloads

5.5、5.6、5.7版本目前使用的最多,之后就是8.0了,第三阵营的版本基本不使用。
MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了。后来被Oracle收购后,终于迎来了像样的5.6版本,之后就是5.7、8.0版本。由于6.0版本号已被用过,7.x系列版本专用于NDB Cluster,因而新版本号从8.0开始。

mysql

MySQL是一个关系型数据库管理系统 由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

MySQL的逻辑架构是什么

如果能在脑海中构建出一幅 MySQL 各组件之间协同工作的架构图,那么这将有助于你深入理解 MySQL 服务器。

图片

最上层的客户端所包含的服务并不是 MySQL 独有的,大多数基于网络的客户端 / 服务器工具或服务器都有类似的服务,包括连接处理、身份验证、确保安全性等。

第二层是比较有意思的部分。大多数 MySQL 的核心功能都在这一层,包括查询解析、 分析、优化、以及所有的内置函数(例如,日期、时间、数学和加密函数),所有跨存储引擎的功能也都在这一层实现:存储过程、触发器、视图等。

第三层是存储引擎层。存储引擎负责 MySQL 中数据的存储和提取。和 GNU/Linux 下的各种文件系统一样,每种存储引擎都有其优势和劣势。服务器通过存储引擎 API 进行通信。这些API屏蔽了不同存储引擎之间的差异,使得它们对上面的查询层基本上是透明的。

应用环境

与其他的大型数据库例如 OracleDB2SQL Server等相比,MySQL [1]  自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。

Linux作为操作系统Apache 或Nginx作为 Web 服务器,MySQL 作为数据库PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。

数据(Data):

  • 描述事务的符号记录
  • 包括数字、文字、图形、图像、声音、档案记录
  • 以”记录“形式按统一的格式进行存储
    表:
  • 将不同的记录组织在一起
  • 用来存储具体数据
    数据库:
  • 表的集合,是存储数据的仓库
  • 以一定的组织方式来存储的相互有关的数据集合
  • 是按照数据结构来组织、存储和管理数据的仓库

数据库是库中有表,表中有记录。

数据库管理系统(DBMS)

数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它提供多种功能,可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。它使用户能方便地定义和操纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和恢复数据库。
数据库管理系统(DBMS):是实现对数据库资源有效组织、管理和存取的系统软件。

  • 数据库的建立和维护
  • 数据定义功能
  • 数据操纵功能
  • 数据库的运行管理功能
  • 通信功能

数据库系统

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

DBMS的工作模式如下:

  1. 接受应用程序的数据请求和处理请求;
  2. 将用户的数据请求(高级指令)转换成复杂的机器代码(低层指令);
  3. 实现对数据库的操作;
  4. 从对数据库的操作中接受查询结果;
  5. 对查询结果进行处理(格式转换);
  6. 将处理结果返回给用户。

3.png

安装部署mysql

编译安装MySQL

编辑一键部署mysql脚本
#!/bin/bash
#安装Mysql环境依赖包
rm -f /var/run/yum.pid 
yum -y install \
expect \
gcc \
gcc-c++ \
ncurses \
ncurses-devel \
bison \
cmake
#如果yum安装失败,则退出脚本
[ $? != 0 ] && exit
#创建程序用户,便于准确控制访问用户
useradd -M -s /sbin/nologin  mysql
#解压软件包
cd /opt
tar xzvf mysql-boost-5.7.20.tar.gz -C /opt
tar zxvf boost_1_59_0.tar.gz
mv boost_1_59_0 /usr/local/boost
#指定安装路径和安装模块
cd /opt/mysql-5.7.20/
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=boost \
-DWITH_SYSTEMD=1
#编译及安装
make -j 2 && make install
#修改mysql 配置文件
echo '[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
[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' > /etc/my.cnf
#更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
#将mysql的可执行文件放入环境变量PATH的目录中,方便系统直接识别mysql命令
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$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
#添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ 
#重新加载,启动mysql服务,将mysql设置为开机自启
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
复制代码

Snipaste_2022-10-15_13-32-02.png

Yum安装MySQL

1. #创建mysql安装包的在线源
cd /etc/yum.repos.d/
vim mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
  
2. #安装服务mysql-community-server
yum -y install mysql-community-server
  
3. #启动服务
systemctl start mysqld
ss -ntap |grep 3306
  
4. #此时无法使用mysql命令直接登入数据库。需要查看本地root用户的默认密码,使用密码登录。
grep password /var/log/mysqld.log    #查看默认密码
mysql -u root -p'默认密码'       #使用密码登录,特殊符号用单引号引起来
  
5. #登入数据库后必须修改密码。
mysql> alter user root@'localhost' identified by 'Xuezhong20@21';
#为保证安全,密码的复杂性要足够,需要包含英文字母大小写、数字和特殊字符。
#可以使用"\h;"查看帮助
复制代码

Snipaste_2022-10-19_17-28-52.png