MySQL数据库的操作

目录

  • 创建数据库
  • 字符集和校验规则
    • 查看系统默认字符集以及校验规则
    • 校验规则对数据库的影响
  • 操纵数据库
    • 查看已经创建的数据库
    • 显示某个数据库的创建语句
    • 修改数据库
    • 删除数据库
  • 数据库备份和还原
    • 备份
    • 还原
  • 查看连接情况

创建数据库

语法:
create database [if not exists] 数据库名字 [charset=xxx] [collate=yyy];
说明:
[]里面的表示可选项,也就是可写也可以不写;
charset=xxx,指定当前数据库采用什么样的编码格式来进行存储数据;
collate:指定数据库字符集的校验规则;
注意加";"
eg:
在创建之前,我们可以先使用show databases;语句来查看一下当前MySQL服务器维护的有那些数据库:
在这里插入图片描述
现在我们可以利用create database 语句创建一个数据库:create database d1
在这里插入图片描述
我们可以发现,我们的确完成了一次数据库的创建,可是前面我们说了数据库也是一个文件啊,那么这些数据库文件存储在哪里呢?
这个我们可以通过查看/etc/my.cnf文件来得知数据库文件的存储位置:
在这里插入图片描述
于是我们可以去这个路径下看一看,我们创建的d1数据库是不是真的存储在这个路径下:
在这里插入图片描述
看来确实是这样子的!
那么数据库文件里面都有什么东西呢?
我们可以查看我们刚才创建的数据库d1来看看:
在这里插入图片描述
通过查看d1文件,发现虽然我们还没有向这个数据库中插入任何数据,但是这个数据库中早以存在着一个文件,这个文件中是这个数据库的默认配置文件,里面存的是当前数据库下存储数据时所采用的编码格式和数据库字符集的校验规则;
可是为什么是上面这个样子呢?
这主要是因为,我们在/etc/my.cnf配置文件中配置的默认编码格式就是Utf8的因此,当我们在创建数据库的时候如果不指明当前数据库所采用的编码格式的话,那么它会采用配置文文件中的编码格式及其对应的校验规则!
为此,如果我们想要指名一个数据库的编码格式该怎么办呢?
可以使用以下SQL语句:create database d2 charset=gbk collate=gbk_chinese-ci;
在这里插入图片描述
我们可以看到新的数据库d2确实使用的我们指定的编码格式和校验字符集;
当然,我们可以通过show charset;语句来查看编码格式对应的校验规则:
在这里插入图片描述同理我们也可以使用show collation来查看校验规则对应的编码格式:
在这里插入图片描述

字符集和校验规则

什么是字符集?什么又是校验规则?
字符集就是规定了数据库在存储或读取数据时所采用的一种编码格式,在存储和读取时采用的编码格式必须一样,不然会造成数据错误解释!
而校验规则呢?
顾名思义,是一组规则,用来定义在进行字符串比较和排序时,字符的比较规则,不同的校验规则可以影响字符的排序顺序、大小写敏感性;例如某些校验规则不区分大小写(eg:utf8_general_ci),某些校验规则区分大小写(eg:utf8_bin);

查看系统默认字符集以及校验规则

show variables like 'character_set_database';//查看默认字符集;
在这里插入图片描述

show variables like 'collation_database';//查看默认校验规则;

在这里插入图片描述

校验规则对数据库的影响

创建一个d1数据库,字符集为utf8,校验格式为utf8_general_ci(不区分大小写),
再创建一个d2数据库,字符集为uthf8,校验格式为utf8_bin(区分大小写)
在这里插入图片描述
紧接着,我们可以在d1,d2两个数据库里面形成同一张表,并且插入同样的数据,然后观察最后的排序结果:

d1数据库:
use d1;切到d1数据库
create table person(name varchar(20));//创建一个表结构;
inster info person values(‘a’);
inster info person values(‘A’);
inster info person values(‘b’);
inster info person values(‘B’);
inster info person values(‘c’);
inster info person values(‘C’);
d2数据库也是同样的操作;
通过select * from person;语句查询d1和d2数据库中两个person表的结果!
在这里插入图片描述
很明显两个结果是一样的,这个毫无疑问!紧接着,我们在利用select * from person where name='a';语句筛选出‘a’的数据:
在d1数据库中的筛选结果:
在这里插入图片描述
这也不意外,因为d1数据库的校验规则是不区分大小写的,因此,当我们筛选’a’的时候,‘A’也会被筛选出来,同理我们预测一下d2数据库的筛选结果,d2数据库数区分大小写的因此筛选’a’的时候筛选结果就应该只有’a’:
在这里插入图片描述
事实确实是这样的!
这也就验证了不同校验规则对于数据库的不同影响!

操纵数据库

查看已经创建的数据库

show databases;
在这里插入图片描述

显示某个数据库的创建语句

show create database d1;
在这里插入图片描述

  1. MySQL建议我们关键字大写,但是不是必须的!;
  2. 数据库名字反引号’ ',是为了防止使用的数据库名和关键字冲突!;
  3. /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话 ;

修改数据库

对于数据库的修改主要在于对于数据库字符集、校验规则的修改;
语法:
alter database 数据库名 [charset=xxx] [collate=yyy];
eg:
我们可以更改以下d1数据库的字符集和校验规则,d1目前的字符集是utf8,校验规则是utf8_general_ci;
现将其更改为:字符集:gbk,校验规则:gbk_chinese_ci;
更改语句:alter database d1 charset=gbk collate=gbk_chinese_ci;
在这里插入图片描述

删除数据库

语法:
drop database [if exists] 数据库名;
执行删除之后的结果:

  1. 数据库内部看不到对应的数据库;
  2. 对应的数据库文件夹被删除,级联删除里面的数据表也会被删除;
    所以,千万不要轻易删除一个数据库,万一真的要删除,可以先在删除之前做个备份,关于如何备份,我们后面再说;
    eg:
    我们现在要删除d2数据库;
    删除语句drop database if exists d2;
    在这里插入图片描述
    不在存在d2数据库!

数据库备份和还原

备份

关于数据库的备份工作,我们需要借用mysqldump工具,这个工具在我们安装MySQL服务时就已经安装好了;
语法mysqldump -h ip -P 端口号 -u 用户 -p 密码 -B 数据库名 > 数据库备份存储的文件路径(退出mysql客户端)
eg:
在这里插入图片描述
我们可以先看一看这个备份文件里面的内容:
在这里插入图片描述
这些视乎好像就是我们创建d1数据库和对d1数据库进行的各种操作!因此数据库的备份原理就是将一个数据库从创建开始的每一次操作都保存下来,最后还原的时候,只需要重新执行一下这些操作就行了,当然不是我们用户来执行啦!
现在备份也备份好了,我们也就可以快乐的删除d1数据库了;
drpo database d1;
在这里插入图片描述

还原

备份也备份好了,删除也删除了,我们就先来还原一下吧:
语法:source /root/MySQL.d1.sql;(需要先登录上mysql客户端)
在这里插入图片描述

也许这里就有读者有疑惑了,既然是备份啊,我们也知道数据库的存储地址,我们为什么不直接去(/var/lib/mysql/)路径下将数据库文件直接使用cp命令拷贝一份呢?反而要借助什么mysqldump工具,这是为什么?
因为数据库不仅仅是一个单独的文件,而是由多个文件和文件夹组成的复杂结构。这些文件包含着数据库表、索引、元数据等关键信息。直接使用cp命令复制这些文件可能会导致数据不一致、损坏、丢失。

注意:
如果我们要备份的不是一个完整数据库,而是某个数据库中的一个表该怎么办?
与备份数据库类似,只不过备份命令不用在叫-B选项;
语法:mysqldump -h ip -P port -p -u root d1 person > 备份路径 ;
eg:
在这里插入图片描述
接着我们还原:
首先我们还原的是一张表,因此我们就必须在一个数据库中,这个数据库可以不是原数据库,但是必须是一个数据库,接着我们在数据库中进行source 还原路径;进行还原!
在这里插入图片描述>

同时备份多个数据库:
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据
库,再使用source来还原。为什么?
我们来看一看对于同一个数据库,带-B备份和不带-B备份的差别:
在这里插入图片描述
从两个备份文件中,我们可以看见,带-B的备份文件在备份的时候会将创建数据库的语句也备份下来,而不带-B的备份文件不会将创建数据库的语句备份下来,因此当我们对d1.sql执行还原操作的时候mysql客户端会根据d1.sql的第一句还原语句还原出数据库,而还原d3.sql的时候则不会,而是直接进行还原表的操作,因此这也就是为什么当我们还原不带-B的数据库备份文件时需要先创建一个数据库的原因了!

查看连接情况

show processlist;
在这里插入图片描述
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后当我们发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

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

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

相关文章

【Web开发指南】MyEclipse XML编辑器的高级功能简介

MyEclipse v2023.1.2离线版下载 1. 在MyEclipse中编辑XML 本文档介绍MyEclipse XML编辑器中的一些可用的函数,MyEclipse XML编辑器包括高级XML编辑,例如: 语法高亮显示标签和属性内容辅助实时验证(当您输入时)文档内容的源(Sou…

如何构造不包含字母和数字的webshell

利用不含字母与数字进行绕过 1.异或进行绕过 2.取反进行绕过 3.利用php语法绕过 利用不含字母与数字进行绕过 基本代码运行思路理解 <?php echo "A"^""; ?> 运行结果为! 我们可以看到&#xff0c;输出的结果是字符"!"。之所以会…

测试框架pytest教程(6)钩子函数hook开发pytest插件

pytest hook 函数也叫钩子函数&#xff0c;pytest 提供了大量的钩子函数&#xff0c;可以在用例的不同生命周期自动调用。 比如&#xff0c;在测试用例收集阶段&#xff0c;可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的&#xff0c;使…

Python爬虫(十四)_BeautifulSoup4 解析器

CSS选择器&#xff1a;BeautifulSoup4 和lxml一样&#xff0c;Beautiful Soup也是一个HTML/XML的解析器&#xff0c;主要的功能也是如何解析和提取HTML/XML数据。 lxml只会局部遍历&#xff0c;而Beautiful Soup是基于HTML DOM的&#xff0c;会载入整个文档&#xff0c;解析整…

SOLIDWORKS基准面介绍

SOLIDWORKS是一款广泛应用于机械设计领域的三维建模软件&#xff0c;其中基准面是在建模过程中必不可少的要素。本文将介绍什么是SOLIDWORKS基准面&#xff0c;以及它在设计中的作用。 SOLIDWORKS基准面是指在设计过程中用来确定草图绘制、特征创建的参考平面。 SOLIDWORKS基…

交换机生成树STP

生成树协议&#xff08;spanning-tree-protocol,stp&#xff09;&#xff1a;在具有物理环路的交换机网络上生成没有回路的逻辑网络的方法&#xff0c;生成树协议使用生成树算法&#xff0c;在一个具有冗余路径的容错网络中计算出一个无环路的路径&#xff0c;使一部分端口处于…

matlab使用教程(18)—多项式的定义和运算

1.创建并计算多项式 此示例说明如何在 MATLAB 中将多项式表示为向量以及根据相关点计算多项式。 1.1 表示多项式 MATLAB 将多项式表示为行向量&#xff0c;其中包含按降幂排序的系数。例如&#xff0c;三元素向量 p [p2 p1 p0]; 表示多项式 创建一个向量以表示二次多项式…

Hover研究: 下一代借贷协议 | 第一部分

这是我们对关于可持续通证经济模型用于借贷协议的研究&#xff0c;一共分为两部分&#xff0c;此篇为第一部分。 Hover团队花费了大量时间研究现有的借贷协议结构。我们的研究揭示了这些协议在扩展和增长过程中面临的多个挑战。 本系列将讨论这些挑战是什么&#xff0c;为什么它…

https非对称加密算法

非对称加密算法原理 在客户端公开公钥&#xff0c;服务端保存私钥 1.客户端第一次请求先请求443端口&#xff0c;从443端口下载公钥。 2.客户端将数据进行公钥算法进行加密&#xff0c;将秘文发送到服务端 服务端收到秘文后&#xff0c;通过私钥算法进行解密得到明文数据。…

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些Pod通过Endpoints…

高速、稳定、安全:4G工业路由器在户外环境下的组网优势

能够在无人值守的户外环境下实现组网和远程监控功能的4G工业路由器&#xff01;工业级路由器具备防尘、防水、耐高温等特性&#xff0c;适用应用在恶劣的户外及工业场景中&#xff0c;如远程农田监测、驾考科目二/科目三、智能交通系统、环境监控、煤矿数据采集、水利远程管理等…

WPF CommunityToolkit.Mvvm

文章目录 前言ToolkitNuget安装简单使用SetProperty&#xff0c;通知更新RealyCommandCanExecute 新功能&#xff0c;代码生成器ObservablePropertyNotifyCanExecuteChangedForRelayCommand其他功能对应关系 NotifyPropertyChangedFor 前言 CommunityToolkit.Mvvm&#xff08;…

C#8.0本质论第四章--操作符和控制流程

C#8.0本质论第四章–操作符和控制流程 4.1操作符 有些操作符以符号的形式出现&#xff0c;例如、-、?.或者??等&#xff0c;而另一些操作符则为关键词&#xff0c;例如default和is。 4.1.1一元正负操作符 一元正操作符()对值几乎没有影响&#xff0c;它在C#中是多余的。…

测试框架pytest教程(4)运行测试

运行测试文件 $ pytest -q test_example.py 会运行该文件内test_开头的测试方法 该-q/--quiet标志使输出保持简短 测试类 pytest的测试用例可以不写在类中&#xff0c;但如果写在类中&#xff0c;类名需要是Test开头&#xff0c;非Test开头的类下的test_方法不会被搜集为用…

<kernel>kernel 6.4 USB-之-hub_port_connect()分析

&#xff1c;kernel&#xff1e;kernel 6.4 USB-之-hub_port_connect()分析 kernel 6.4 USB系列文章如下&#xff1a; &#xff1c;kernel&#xff1e;kernel 6.4 USB-之-hub_event()分析 &#xff1c;kernel&#xff1e;kernel 6.4 USB-之-port_event()分析 &#xff1c;kern…

LeetCode.141,142——环形链表,环形链表Ⅱ

LeetCode.141——环形链表&#xff1a; 题目如下&#xff1a; 通过题目中对于环形链表的大体描述&#xff0c;可以知道&#xff0c;环形链表最后一个结点保存了一个地址&#xff0c;用于返回链表中某个结点。并且。这个返回的结点并不是返回图中保存数据的结点。而是返回链表…

TCP特点UDP编程

目录 1、tcp协议和udp协议 2、多线程并发和多进程并发&#xff1a; &#xff08;1&#xff09;多进程并发服务端 &#xff08;2&#xff09;多进程并发客户端&#xff1a; 3、tcp: 4、粘包 5、UDP协议编程流程 (1)服务器端&#xff1a; (2)客户端&#xff1a; 6、tcp状…

成集云 | 乐享问题邀请同步企微提醒 | 解决方案

源系统成集云目标系统 方案介绍 腾讯乐享是腾讯公司开发的一款企业社区化知识管理平台&#xff0c;它提供了包括知识库、问答、课堂、考试、活动、投票和论坛等核心应用。这个平台凝聚了腾讯10年的管理经验&#xff0c;可以满足政府、企业和学校在知识管理、学习培训、文化建…

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…

8年经验之谈 —— 基于jmeter的性能全流程测试

01、做性能测试的步骤 1、服务器性能监控 首先要在对应服务器上面安装性能监控工具&#xff0c;比如linux系统下的服务器&#xff0c;可以选择nmon或者其他的监控工具&#xff0c;然后在jmeter模拟场景跑脚本的时候&#xff0c;同时启动监控工具&#xff0c;这样就可以获得jm…