数据库基础

1.连接MySQL服务器:

连接服务器:mysql -h 127.0.0.1 -P 3306 -u root -p

-h:表示指明部署了mysql的服务主机,127.0.0.1是本地环回

-P:表示要指定访问的端口号,mysql服务端的默认端口号是3306

-u:表示要指定登录用户,-uroot代表的是登录mysql的用户是root

-p:指明输入密码

退出mysql:quit

注意:登录时,没写-h 127.0.0.1 默认连接本地;没写-P 3306 默认连接3306端口号


2.什么是数据库:

MySQL实际上是一个网络服务(C/S模式),分客户端和服务端。我们要使用客户端就要先运行服务端,其中mysqld是服务端,mysql是客户端。

mysql是一个网路服务,我们可以mysql绑定的端口号。

MySQL是一套给我们提供数据存取的服务的网络程序。

口语中的数据库:一般指的是,在磁盘或者内存中存储的特定结构组织的数据。

就相当于未来在磁盘或内存 一定有各种各样的数据库结构,表结构我们把那套存储方案一般称为数据库。数据库是关系型数据库,表和表之间有自己特定关系,按照自己数据库那套逻辑来组织的。

数据库最后还是在磁盘或者内存中存储的。我们暂时不考虑内存,只考虑磁盘。未来在磁盘中存储的一堆的数据库文件我们就称之为数据库(将来在磁盘上存储的一套数据库方案(文件)),将来有一批数据最终以数据库的方式在磁盘中存储着,这就是数据库。

因为一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理能力(用户角度),数据库就是提供数据内容的管理功能。

数据库服务 ---> mysqld

数据库客户端 ---> mysql

数据库 ---> 磁盘上存储的一套数据库方案(文件)

总之,局部上看数据库就是提供数据存储能力的文件,这个文件有自己内部的格式,可以让mysqld服务进程进行增删查改。数据库就是在磁盘中存储的结构化的数据,这样的数据库文件就称为数据库。宏观上理解上面一整套东西就是数据库,它是一套数据存储的解决方案。

文件保存数据有以下几个缺点:

文件的安全性问题

文件不利于数据查询和管理

文件不利于存储海量数据

文件在程序中控制不方便

数据库存储介质:磁盘、内存

为了解决上述问题,专家们设计出更加利于管理数据的东西------数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。


3.数据库简单使用实例:

使用mysql建立一个数据库,建立一张表结构,插入一些数据,观察一下在Linux如何表现。

show databases:查看当前数据库

这个数据库在哪里? vim /etc/my.cng //查看配置文件

进入对应的文件路径,看到的就是数据目录中存放的数据内容。

建立数据库:create database _datadase1

所以建立数据库,本质就是Linux下的一个目录

当我们回过头看上面那张图片,我们对应的服务器会收到来自客户端mysql下达的sql指令,然后被mysqld识别是创建数据库,它就在磁盘上建一个目录,这就是数据库。数据库最终也是要存数据的,一般数据库是一种关系型数据库,所以数据库都是要有表结构的。

use _database1:选择数据库

创建数据库表:

第一个name属性的名称,后面是它的数据类型以及大小

当建立了一张表之后,就是在刚才建立的数据库目录下帮我们建立了下面两个文件

所以在数据库内建立表,本质就是在Linux下创建对应的文件

我们的数据库也是数据库文件 ,这套数据库文件并不由程序员自己手动的直接去改这些文件,而是程序员通过mysql客户端,去访问mysqld服务来帮我们操作。程序员不关心文件格式、内容是什么样子。只关心数据有什么想做什么,把sql语句给mysqld,它帮你取做。

表中插入数据:

insert into student (name, age, gender) values ('张三', 23, '男');

向name,age,gender三列,插入数据values后面跟的值

查询表中数据:

select * from student;

数据逻辑存储是用户存进去的数据最后以什么结构存储或呈现出来呢?最终它是表行列式结构。一行表示一个人,一列表示一个属性。实际在数据库内部有自己的协议和格式定义在磁盘上面存肯定不是直接把这个表存进去,是有自己的格式的。


4.服务器、数据库、表之间的关系:

所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:


5.MySQL架构:

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

最上面是MySQL客户端,现在我们在linux下是以命令行式使用数据库,后面还会以C/C++,图像化界面使用数据库。

整体对于一个MySQL Server来讲主要功能由三层构成,第一层连接池:主要是安全连接管理(连接管理、鉴权、保证安全...);第二层:比如说客户端会下达各种sql指令,收到指令然后回对指令做各种语法、词法分析,甚至会对sql语句做一定程度优化安装sql协议然后在下达给下一层;第三层:匹配的就是一个一个存储引擎,作用有点像计算机体现结构体的驱动。下面可能有不同种类的引擎,这些存储引擎从上层接收下达下来的经过词法语法调优过的sql语句,然后存储引擎对这些sql语句解释,最下面这一层才是真正处理任务的,它帮我们去访问指定的数据库文件,访问指定的表。把数据进行增删查改。

怎么会有这么多存储引擎呢?主要还是因为数据库是给我提供数据存储服务的,但是这个数据有种类的差别,有的是文档型的,有的是二进制型的,有的是大文件型的等等,所以针对不同种类的数据的需求可能采用不同的存储方案,所以MySQL给我们提供各种各样的搜索引擎,诸如MyISAM适合大文件读取,InnoDB有很丰富的索引支持可以方便进行快速的进行搜索查找。所以可以针对不同的场景由用户来配置MySQL底层采用不同的存储引擎来满足上层的存储需求。

总结一下MySQL Server有三层:

第一层:安全连接管理

第二层:词法、语法分析,sql语句优化

第三层:具体完成数据存储方案

最下面就是它依赖的对应的文件系统,帮我们把数据以二进制方式存到特定的目录下然后构建特定的普通文件把数据存储好。


6.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(权限管理,事务)


7.存储引擎:

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

存储引擎对比:

空白表示不支持


8.主流数据库:

SQL Sever:微软的产品,.Net程序员的最爱,中大型项目。

Oracle:甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。

MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商、SNS、论坛,对简单的SQL处理效果好。

PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用、商用,还是学术研究使用,可以免费使用,修改和分发。

SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

H2:是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

相关推荐
天桥下的卖艺者42 分钟前
chrals.CTI函数升级版发布,增加了CTI衍生的脂肪指数提取
数据库·r语言
帷幕落秋1 小时前
Mysql备份
运维·数据库
ShineWinsu1 小时前
对于Redis:ZSet类型的解析
数据库·c++·redis·缓存·面试·有序集合·zset
Dxy12393102161 小时前
MySQL 条件注释 vs 普通注释
数据库·mysql
做运维的阿瑞1 小时前
自连接、交叉连接与复杂 JOIN:一条问题链讲透
前端·数据库·mysql
charmingmm8152 小时前
数据库和数据表的设计和命名经验
数据库
EatFan2 小时前
Spring Boot 4 迁移避坑清单:Jackson 3、starter 拆分与最低 JDK 口径核对(含若依/芋道/CRMEB 升级对照)
java·数据库·spring boot·spring boot 4·java 21·jakarta ee 11·jackson 3
其实防守也摸鱼2 小时前
渗透测试学习计划(全栈综合 · 零基础进阶)
android·数据库·学习·安全·oracle·自动化·学习方法
ZealSinger2 小时前
Go1.25 FlightRecorder慢请求截trace
网络·数据库·go