MySQL——1、数据库基础

数据库基础

1、安装MySQL

1、更新软件包列表

bash 复制代码
sudo apt update

2、查看MySQL安装包

bash 复制代码
apt list | grep mysql-server

3、安装MySQL

bash 复制代码
# 默认安装最新版
sudo apt install -y mysql-server

4、启动MySQL

安装成功后我们需要启动mysql服务

bash 复制代码
sudo systemctl start mysql

然后我们查看一下是否存在一个mysqld的进程:

5、配置mysqld.cnf文件

bash 复制代码
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

提权使用vim打开该文件进行配置,在文件最后加入以下内容:

skip-grant-tables

character-set-server=utf8

default-storage-engine=innodb

第一行配置表示配置root免密码登录,我们后面会设置密码。第二行配置编码为utf8。第三行设置默认存储引擎为innodb。
配置好后保存退出,然后使用以下命令重启mysql服务。

bash 复制代码
sudo systemctl restart mysql

6、访问数据库服务

-h指明登录部署了mysql服务的主机,实际上mysql是一个网络服务。-P指明要访问的端口号。-u指明登录用户。-p指明需要输入密码。然后我们直接回车就会发现登录失败,这是因为上面配置了免密码登录导致mysql并没有成网络服务,我们使用netstat -tnlp是看不到端口号为3306的网络服务的,这个我们后面用户管理设置了密码再将配置的免密码登录删掉。

我们直接使用mysql -uroot -p登录,不需要输入密码直接回车即可。如果要退出输入quit即可。


2、什么是数据库


1、mysql是数据库服务的客户端。
2、mysqld是数据库服务的服务端。
3、mysql本质上是基于C(mysql) S(mysqld)模式的一种网络服务。

mysql是一套给我提供数据存储服务的网络程序。
数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据------将来在磁盘上存储的一套数据库方案。数据库服务------mysqld。

存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:文件的安全性问题、文件不利于数据查询和管理、文件不利于存储海量数据、文件在程序中控制不方便。数据库存储介质:磁盘、内存。
数据库本质:对数据内容存储的一套解决方案,你给我字段或者要求,我直接给你结果。


如图,原来我们用户是直接和磁盘上的文件打交道的,现在我们通过mysql客户端访问服务器上的mysqld服务端,然后服务端将SQL进行分析然后去操作磁盘上的数据库文件,获取到结果后再将结果返回给mysql客户端。

主流数据库:
SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

服务器,数据库,表关系:
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:


3、数据库使用案例

样例:使用mysql建立一个数据库,建立一张表结构,插入一些数据。看看数据库在Linux中是如何表现的。

1、首先登录数据库:mysql -uroot -p

2、查看所有数据库:show databases;

登入root账户,或者使用sudo提权,查看/var/lib/mysql下的文件,对比左边的数据库,我们发现数据库本质上就是在Linux下的一个目录。

3、创建一个数据库:create database helloworld;

建立数据库,本质上就是在Linux下创建一个目录。

4、使用数据库,相当于进入该目录:use helloworld;

5、创建数据库表

创建数据库表的语法如图左侧,首先是列的名称,然后是属性,多个列以逗号分隔开。创建后进入该数据库目录下可以看到多了一个student.ibd的文件。

6、插入数据

使用insert into 表名,向数据库的某个表插入数据。

7、查询表中数据

如图,查询的数据信息是逻辑存储结构。


4、MySQL架构与SQL分类

MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如Unix/Linux、Windows、Mac和Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

首先mysql服务端的最上面是一个连接池,进行连接管理和安全验证的。然后连接池下面就是用来进行SQL语法分析解析优化的,然后将它们交给再下一次的存储引擎,存储引擎再去操作磁盘上的文件。不同的存储引擎适用于不同类型的存储数据。

SQL分类:
DDL[data definition language]数据定义语言,用来维护存储数据的结构。代表指令:create,drop,alter。
DML[data manipulation language]数据操纵语言,用来对数据进行操作。代表指令:insert,delete,update。
DML中又单独分了一个DQL,数据查询语言,代表指令:select。
DCL[Data Control Language]数据控制语言,主要负责权限管理和事务。代表指令:grant,revoke,commit。

5、存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。


使用show engines \G可以查看当前数据库支持的存储引擎。或者使用show engines。

虽然存储引擎这么多,但是我们主要使用的还是InnoDB和MyISAM这两种存储引擎。我们在最初配置的存储引擎也是InnoDB。

相关推荐
技术宝哥17 分钟前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸2 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1232 小时前
Redis解析
数据库·redis·缓存
数据库幼崽2 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd2 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou3 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh3 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵5 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多5 小时前
Linux——mysql主从复制与读写分离
数据库·mysql