数据库关系图,如何连接mysql,编码集和校验集,创建/删除/选择/修改/备份/恢复数据库,数据库本质,查看数据库连接

目录

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

连接服务

库的操作

查看数据库

编码格式

编码集

校验集

查看支持的规则

查看系统默认规则 

查看默认编码集

查看默认校验集

查看各种服务的默认校验集

创建数据库

if not exists

指定格式创建数据库

设置编码集

设置校验集

不同校验集的影响

​编辑

示例

查看创建数据库时使用的命令

/*!40100 default.... */

数据库中数据存放位置 

数据库本质

反过来操作

删除数据库

选择数据库

本质

查看当前选择的数据库

修改数据库

如果显示没有权限

备份数据库

本质

-B 

恢复数据库

本质

查看数据库连接情况 

总结


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

如图:

(其中, DB指的是数据库)

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

所以,我们首先需要连接上mysql

连接服务

  • 如果不指定,就会使用配置文件中的默认选项
  • 之前我们的root用户并没有设置密码,所以登录时不需要-p:

接下来,介绍对库的操作

库的操作

查看数据库

show databases

  • 查看所有拥有的数据库
  • 注意这里是复数(因为一般会有多个)

在介绍创建数据库之前,我们先要了解一下编码集和校验集的概念

编码格式

编码集

存储时采用的编码格式

校验集

进行增删改查时,进行字段比较时使用的编码格式,也就是读取数据库内容时采用的编码方式

(存储用什么格式,读取就得用一样的格式,不然读不懂)

查看支持的规则

show charset

它会给出支持的编码集以及对应的校验集

show collation

它会给出支持的校验集和对应的编码集,以及其他属性

查看系统默认规则 

查看默认编码集

show variables like 'character_set_database' 

查看默认校验集

show variables like 'collation_database'

查看各种服务的默认校验集

show variables like 'collation_%'

创建数据库

create database + (if not exists) + 库名 + 属性

if not exists

  • 用于保证用户不会创建同名数据库
  • 如果已经存在,会有一个警告

指定格式创建数据库

设置编码集
  • charset = 格式名 
  • character set 格式名
设置校验集
  • collate 格式名
  • collate = 格式名

如果不手动设置,会使用配置文件中的默认编码格式

不同校验集的影响

  • 从前面可以看到,我们的默认校验集是utf8_general_ci,它是不区分大小写
  • 那么我们再创建一个使用utf8_bin校验集的数据库d1 (它可以区分大小写)
示例
  • 我们建立一个表,插入一些数据,来看看,不同的校验集对数据搜索的结果有何影响
  • 分别在两个数据库中建立相同的表,然后在表中插入a和A字符:
  • 分别在两个数据库的表中搜索a,会发现,出现的结果不同:
  • 我们这样就验证出了,不同的校验集,会对查询结果产生影响
  • 所以,我们在选择校验集时,需要仔细考虑我们的使用场景

查看创建数据库时使用的命令

show create database + 库名

/*!40100 default.... */

这个不是注释,它表示当前mysql版本如果大于4.01版本,就执行后面的语句

如果加上\G选项(还记得吗,是用来格式化显示的):

数据库中数据存放位置 

通过查看我们的mysql配置文件 -- /etc/my.cnf

  • 我们可以看到,有一个datadir,它就代表了存放mysql数据文件的路径
  • 查看这个路径下的文件:
  • 我们会发现,它里面的标蓝色的文件名,怎么正好和我们拥有的数据库名字相同呢?
数据库本质
  • 因为,标蓝色就代表这个文件是个目录文件
  • 所以,我们创建数据库,本质上其实就是在mysql专门保存数据的目录下,创建了个目录文件
  • 所以,数据库本质上也是个文件
反过来操作

那如果我们直接在/var/lib/mysql下创建一个目录,会怎么样呢?

会发现,反过来操作也是可以的

但是!!!!可以不代表它合理!

  • 既然我们数据库的底层依靠了文件系统,那么我们就不应该反过来操作,老老实实使用它规定的sql语句即可,不然它被设计出来是为了什么呢?
  • 了解底层,是为了让我们更好的理解它,从而使用它,而不是越过它直接操作底层

删除数据库

drop database  + 库名

删除数据库的操作一定要慎重,删除了数据库,相应的数据也会被删除

选择数据库

use + 库名

  • 从前面介绍的这个关系图可以知道,一个数据库可以对应多个表
  • 那么,如果我们要对表进行操作,肯定要先选择某个数据库

本质

  • 从前面介绍的,数据库的本质是目录文件,可以判断出 -- 选择数据库,本质上就是选择进入哪一个目录
  • 那么,我们自然也可以推出,表其实就是普通文件
  • 毕竟我们在目录中操作的,肯定就是普通文件了

查看当前选择的数据库

select database()

(有时候我们可能会忘记自己当前选择了哪个数据库)

修改数据库

alter database + 库名 + 要修改的属性

如果显示没有权限

其实是因为,在mysql数据存放的路径下,这个目录的拥有者是root,而不是mysql用户

我们修改权限后,就可以正常使用了:

我们可以修改d2的编码集:

 

备份数据库

mysqldump -p 3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

  • 需要我们手动设置生成的.sql文件:
  • 注意,这里是在shell下执行的,而不是在mysql服务中
  • 使用相对路径也可:

本质

保存了历史对数据库的有效操作

  • 当我们查看生成的.sql文件的内容:
  • 会发现它文件的内容,正是我们曾经对这个数据库的一系列操作
  • 说明,mysql会记录下我们的历史操作,并且在进行备份时,将记录的数据写入./sql文件
  • 那么,自然也可以推断出,恢复数据库的原理就是 -- 重新执行一遍记录下的操作

-B 

  • 如果我们不使用-B选项,会发现,在我们建表之前,并没有建立数据库和选择该数据库的语句
  • 而使用了-B选项的d2.sql文件是记录了的

说明,如果不使用-B选项,恢复数据库时,需要我们手动建库​​​​​​​和选择库

恢复数据库

source + 要恢复的./sql文件所在路径

本质

前面已经分析了,恢复数据库的原理就是 -- 重新执行一般.sql文件记录的操作

既然重新执行了一遍,自然数据库就和原来的一样了,也就实现了恢复数据库

查看数据库连接情况 

show processlist

可以查看,当前的数据库有几个用户正在连接:

总结

  • 以上工作,均是由mysql做的,我们只是通过mysql语句下达了指令
  • 所以,数据库实际上就是一堆文件,只是这些文件不由我们直接操作,是数据库服务帮我们去操作的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/263124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装gnvm,nodejs,npm使用方法

安装gnvm,nodejs,npm使用方法 一、安装gnvm gnvm.exe下载地址: https://download.csdn.net/download/hsg77/88651752 http://ksria.com/gnvm/#download 二、配置gnvm环境变量 新建目录,如:d:/nodejs 并把gnvm.exe存储到此目录 并把d:/node…

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理

于NI kb摘录 1.概述 对于NI RIO系列设备(CompactRIO、sbRIO、myRIO等)进行编程时,需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”,为用户提供图形用户界面(GUI),用于监控系统…

RabbitMQ笔记(基础篇)

RabbitMQ笔记_基础篇 MQ基本概念1. MQ概述2. MQ的优势和劣势2.1 优势☆2.2 劣势2.3 使用 MQ 需要满足什么条件呢? 3. 常见的MQ产品 RabbitMQ基本介绍1. RabbitMQ 基础架构2. RabbitMQ 中的相关概念3. RabbitMQ的6 种工作模式☆4. AMQP 和 JMS4.1 AMQP4.2 JMS4.3 AMQ…

关于“Python”的核心知识点整理大全35

目录 13.3.4 重构 create_fleet() game_functions.py 13.3.5 添加行 game_functions.py alien_invasion.py 13.4 让外星人群移动 13.4.1 向右移动外星人 settings.py alien.py alien_invasion.py game_functions.py 13.4.2 创建表示外星人移动方向的设置 13.4.3 检…

[c]定位查找

本题需要注意的是多组测试&#xff0c;输入一组测试&#xff0c;输出一个值 下面附上代码 #include<stdio.h> int main() {int n,tmp,count;int arr[20];while(scanf("%d",&n)!EOF){count0;for(int i0;i<n;i){scanf("%d",&arr[i]);}sca…

【数据结构】九、排序

目录 一、排序概述 二、插入排序 2.1直接插入排序 2.2折半插入排序 2.3二路插入排序 2.4表插入排序 2.5希尔排序 三、交换排序 3.1冒泡排序 3.2快速排序 四、选择排序 4.1简单选择排序 4.2锦标赛排序 4.3堆排序 五、归并排序 六、基数排序 七、总结 一、排序概述…

DBeaver连接国产数据库的步骤

驱动配置 第一次安装过DBeaver之后&#xff0c;配置下驱动仓库&#xff0c;安装下图所示操作。 添加马爸爸的maven库连接地址 id&#xff1a; maven.aliyun.com 名称&#xff1a; maven.aliyun.com url&#xff1a; https://maven.aliyun.com/repository/central/ 或者 ht…

TCP协议:可靠传输的基石

目录 1. 数据完整性的保证 2. 数据的有序传输 3. 确认应答机制 4. 流量控制 5. 拥塞控制 6. 重传机制 结论 引言 TCP&#xff08;Transmission Control Protocol&#xff09;是计算机网络中的一个重要协议&#xff0c;它以其可靠性而闻名。TCP是一种面向连接的协议&…

影响晶振频率稳定性的因素及解决方法

晶振作为电子设备中的核心元件&#xff0c;其频率稳定性对设备的性能和可靠性具有重要影响。晶发电子将介绍影响晶振频率稳定性的因素&#xff0c;并探讨相应的解决方法。 一、影响晶振频率稳定性的因素 频率&#xff1a;晶振的频率是影响其性能的最重要因素之一。在选择晶振…

MongoDB介绍

一、MongoDB介绍 1.1 mongoDB介绍 MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …

Jetpack DataStore

文章目录 Jetpack DataStore概述DataStore 对比 SP添加依赖库Preferences DataStore路径创建 Preferences DataStore获取数据保存数据修改数据删除数据清除全部数据 Proto DataStore配置AndroidStudio安装插件配置proto文件创建序列化器 创建 Proto DataStore获取数据保存数据修…

Spring AOP入门指南:轻松掌握面向切面编程的基础知识

面向切面编程 1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给…

swing快速入门(二十三)弹球小游戏

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1. 键盘响应监听 2. 使用定时器事件更新画板 3. 定时器事件的开始与暂停 4. 弹球小游戏的坐标逻辑判断 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class swing_test_19 {//创建一个窗…

如何选择适合的UI自动化测试工具

随着软件开发项目的复杂性增加&#xff0c;UI自动化测试成为确保应用程序质量的关键步骤之一。然而&#xff0c;在选择UI自动化测试工具时&#xff0c;开发团队需要考虑多个因素&#xff0c;以确保选取的工具适用于项目需求并提供可靠的测试结果。 1. 了解项目需求 在选择UI自动…

esp32-s3训练自己的数据进行目标检测、图像分类

esp32-s3训练自己的数据进行目标检测、图像分类 一、下载项目二、环境三、训练和导出模型四、部署模型五、存在的问题 esp-idf的安装参考我前面的文章&#xff1a; esp32cam和esp32-s3烧录human_face_detect实现人脸识别 一、下载项目 训练、转换模型&#xff1a;ModelAssist…

大型医院PACS系统源码,影像存储与传输系统源码,支持多种图像处理及三维重建功能

PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以数字化的方式将各种医学影像&#xff0c;如核磁共振、CT扫描、超声波等保存起来&#xff0c;并在需要时能够快速调取…

Docker部署 flowable-ui 进行流程建模

Docker部署 flowable-ui 进行流程建模 简介 安装Docker Desktop,本篇无安装步骤安装正常打开运行后&#xff0c;正式开始部署flowable-uicmd执行拉取镜像操作docker pull flowable/flowable-uicmd启动镜像docker run -d --name flowable -p 8081:8080 flowable/flowable-ui修…

基于博弈树的开源五子棋AI教程[4 静态棋盘评估]

引子 静态棋盘的评估是棋力的一个很重要的体现&#xff0c;一个优秀的基于博弈树搜索的AI往往有上千行工作量&#xff0c;本文没有做深入讨论&#xff0c;仅仅写了个引子用来抛砖引玉。 评估一般从两个角度入手&#xff0c;一个是子力&#xff0c;另一个是局势。 1 评估维度 …

SSH无密登陆配置

1 SSH介绍 ssh命令用于远程登录到其他计算机&#xff0c;实现安全的远程管理。 基本语法&#xff1a; ssh 域名/IP地址 示例&#xff1a; &#xff08;1&#xff09;从hadoop100服务器上远程连接hadoop101服务器 [hadoophadoop100 ~]$ ssh hadoop101 如果出现如下内容 Ar…

【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化

引言 动态内存管理的函数有&#xff1a;malloc,calloc,ralloc,free,本文讲解动态内存函数和使用&#xff0c;如何进行动态内存管理,实现通讯录联系人容量的动态化&#xff0c;对常见动态内存错误进行总结。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》…