【MySQL】数据库的相关操作

【MySQL】数据库的相关操作

MySQL数据库的操作

MySQL数据库的操作

github地址

有梦想的电信狗

0. 前言

在学习 MySQL 的过程中,很多初学者往往只停留在“能用”的层面,却忽略了数据库底层的一些行为特征。
例如:创建数据库时究竟发生了什么?删除数据库为什么如此危险?字符集与校验规则对结果有什么影响?

本篇文章将从最基础的数据库操作讲起,带你系统地理解 MySQL 中数据库的查看、创建、删除、修改、编码设置、备份与恢复等操作。
同时结合 Linux 实操演示,帮助你建立数据库操作与系统层面行为的映射关系,从“命令使用”上升到“原理理解”,打好数据库管理的根基。

如果你想在今后的开发中更加自如地管理数据库、避免误操作带来的严重后果,那么这篇文章将非常适合你。

小提示

MySQL 建议我们关键字使用大写,但是不是必须的

1. 查看数据库

查看当前用户所能查看的数据库的列表

  • sql语法
showdatabases;
在这里插入图片描述

查看当前正在使用的是哪个数据库

sql语法

use db_name;# 使用名为 db_name 的数据库 可以将其和 Linux 中的 cd 命令 做类比selectdatabase();# 查看当前正在使用的是哪个数据库 可以将其和 Linux 中的 pwd 命令 做类比
在这里插入图片描述

2. 创建和删除数据库

  • 创建数据库:在Linux系统中,创建数据库本质是在数据库的存储目录下(当前ubuntu 22.04下为/var/lib/mysql) 创建一个目录
  • 删除数据库:在Linux系统中,删除数据库本质是数据库的存储目录下(当前ubuntu 22.04下为/var/lib/mysql) 删除一个目录
    • 注意:不能通过手动在数据库的存储目录下(当前ubuntu 22.04下为/var/lib/mysql) 创建或删除目录的方式创建或删除数据库,应该通过sql命令创建和删除

创建

sql语法

CREATEDATABASE[IFNOTEXISTS] db_name [create_specification [,create_specification]...] create_specification: [DEFAULT]CHARACTERSET charset_name [DEFAULT]COLLATE collation_name 

说明

  • 大写的内容表示关键字
  • [] 中的内容是可选项
  • CHARACTER SET:指定创建的数据库采用的字符编码集
  • COLLATE:指定创建的数据库字符集的校验规则

创建数据库实操

# 创建名为 d1 的数据库, 以下两种写法等同createdatabase d1;createdatabaseifnotexists d1;
在这里插入图片描述

删除

  • sql语法
DROPDATABASE[IFEXISTS] db_ name;

执行删除之后的结果

  • 数据库内部看不到对应的数据库
  • 数据库对应的文件夹被删除。级联删除,里面的数据表也全部被删除
注意:不要随意删除数据库

删除数据库演示实际开发项目时不要随意删除数据库

dropdatabase d1;
在这里插入图片描述

3. 数据库的编码

相同编码的必要性

数据一定有自己的编码格式,编码集必须是统一的。存取数据时,编码格式必须是相同的

创建数据库的时候,有两个编码集:

  1. 数据库编码集:数据库存数据时采用的编码格式
  2. 数据库校验集:支持数据库进行字段比较使用的编码,本质也是一种读取数据库中数据的采用的编码格式

数据库无论对数据做任何操作,都必须保证操作和编码必须是编码一致的


字符集和校验规则

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

  • sql语法
show variables like'character_set_database';# 查看系统默认字符集show variables like'collation_database';# 查看系统默认校验规则
在这里插入图片描述
在这里插入图片描述

查看数据库多端的编码格式

sql语法

show variables like'collation_%';
  • connection端:
  • database
  • server端:
在这里插入图片描述

查看数据库支持的所有字符集和字符集校验规则

showcharset;# 查看数据库支持的字符集show collation;# # 查看数据库支持的字符集校验规则
  • 字符集主要是控制用什么语言。比如utf8可以使用中文

创建指定编码的数据库

  • 创建名为 db1 的数据库,使用默认编码
createdatabase db1;
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,默认校验规则是:utf8_general_ci
  • 创建一个使用utf8字符集的 db2 数据库
# 以下两种写法等效createdatabase db2 charset=utf8;createdatabase db3 characterset utf8;
  • 创建一个使用utf8编码集,并且校对规则为utf8_general_ci的数据库 db3
createdatabase db4 charset=utf8 collate utf8_general_ci;# 既指明编码集,又指明校验集
  • 创建一个使用gbk编码集,并且校对规则为gbk_chinese_ci的数据库 d6
createdatabase d6 charset=gbk collate gbk_chinese_ci;

不同校验规则对数据库的影响

不区分大小写

创建不区分大小写的数据库 test1

createdatabase test1 collate utf8_general_ci;# test1 设置校验规则为 utf8_general_ci,结果 不区分大小写use test1;createtableifnotexists person(name varchar(20));showtables;desc person;insertinto person (name)values('a');insertinto person (name)values('b');insertinto person (name)values('A');insertinto person (name)values('B');insertinto person (name)values('c');insertinto person (name)values('D');select*from person;select*from person where name='a';# test1 设置校验规则为 utf8_general_ci,结果 不区分大小写

区分大小写

  • 创建区分大小写的数据库test2
createdatabase test2 collate utf8_bin;# test2 设置校验规则为 utf8_bin,结果 区分大小写use test2;createtableifnotexists person(name varchar(20));showtables;desc person;insertinto person (name)values('a');insertinto person (name)values('b');insertinto person (name)values('A');insertinto person (name)values('B');insertinto person (name)values('c');insertinto person (name)values('D');select*from person;select*from person where name='a';# test2 设置校验规则为 utf8_bin,结果 区分大小写

结果差异

  • 校验集是否区分大小写会影响我们查看到的结果排序结果
在这里插入图片描述

4. 操纵数据库

修改数据库

sql语法

ALTERDATABASE db_name [alter_spacification [,alter_spacification]...] alter_spacification: [DEFAULT]CHARACTERSET charset_name [DEFAULT]COLLATE collation_name 

说明

  • 对数据库的修改主要指的是修改数据库的字符集,校验规则

使用示例

将数据库 test1 的字符集改成 gbk

alterdatabase test1 charset=gbk collate gbk_chinese_ci;
在这里插入图片描述

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

sql语法

showcreatedatabase 数据库名;

使用示例

showcreatedatabase test1;
在这里插入图片描述

说明:查看创建数据库时使用的命令,包含了命令中我们设置的字符集和校验规则

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default.... */这个不是注释。前面的 CREATE DATABASE d1所有版本的mysql都会执行,/*!40100 default.... */表示当前mysql版本大于4.01版本,就执行/* */中的sql语句

5. 数据库的备份与恢复

数据库本身是一个文件夹,我们可以像备份文件夹那样拷贝一份/var/lib/mysql/路径下的文件夹,但这么做会存在相当多的问题我们推荐使用MySQL本身提供的命令,对数据库进行备份

备份

  • 对某个数据库进行备份,需要退出和该数据库的连接

语法

mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径;
  • 带了 -B 选项时,备份出的文件中会多了一个 create database 的命令
  • 备份数据库命令无需在mysql命令行中执行,可以在Linux中的任意路径执行

示例

# 可以在普通用户的home目录中 新建的 MySql 路径下执行# 对名为 test1 的数据库进行备份 mysqldump -P3306 -u root -p -B test1 >/home/changan_memory/MySql_Back/mytest1.sql;
在这里插入图片描述

备份出的mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的执行的sql语句都装载这个文件中

如果备份的不是整个数据库,而是其中的一张表,怎么做?

mysqldump -u root -p 数据库名 表名1 表名2> D:/mytest.sql# D:/mytest.sql 为假设的数据库备份存放路径

同时备份多个数据库 ?

mysqldump -u root -p -B 数据库名1 数据库名2...> 数据库备份存放路径 

恢复

语法

  • 该命令需在mysql命令行中执行
source /home/changan_memory/MySql_Back/mytest1.sql;
如果想对数据库改名,可以在备份时不带 -B ,恢复数据库时,先创建数据库,新的数据库名就是要改的新名字,再直接source,即可重命名并恢复。

恢复数据库,其实就是将备份出的mytest1.sql文件中记录的sql语句再执行一遍


6. 查看数据库的连接情况

语法

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

7. 结语

通过本文的学习,我们从 MySQL 数据库的基本操作到安全备份与恢复进行了系统梳理。
理解了数据库在系统中的物理表现形式、字符集对数据存储与比较的影响、以及删除表和数据库操作的潜在风险。

这些知识虽然看似基础,但却是每一位开发者必须掌握的底层技能。
只有真正理解数据库的行为,才能在复杂项目中写出更安全、更高效的代码。

🌱 技术的成长从理解细节开始,
⚙️ 稳扎稳打,才能让数据库为你所用。

以上就是本文的所有内容了,如果觉得文章对你有帮助,欢迎 点赞⭐收藏 支持!如有疑问或建议,请在评论区留言交流,我们一起进步

分享到此结束啦
一键三连,好运连连!
你的每一次互动,都是对作者最大的鼓励!征程尚未结束,让我们在广阔的世界里继续前行! 🚀

Read more

Flutter 组件 zxcvbnm 的适配 鸿蒙Harmony 实战 - 驾驭极致密码强度评估、实现鸿蒙端金融级账户准入安全与人性化安全感知的深度方案

Flutter 组件 zxcvbnm 的适配 鸿蒙Harmony 实战 - 驾驭极致密码强度评估、实现鸿蒙端金融级账户准入安全与人性化安全感知的深度方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 zxcvbnm 的适配 鸿蒙Harmony 实战 - 驾驭极致密码强度评估、实现鸿蒙端金融级账户准入安全与人性化安全感知的深度方案 前言 在鸿蒙(OpenHarmony)构建的全场景安全体系中,“账号安全”是所有隐私防护的起点。我们绝大多数开发者在处理用户注册时,依然采用 length > 6 这种极其原始的校验逻辑。殊不知,像 password123 这种符合长度规则的密码,在现代暴力破解算法面前几乎是瞬间沦陷。 如何让你的鸿蒙 App 具备一眼识破“弱密码”的火眼金睛?如何在高频率交互的注册界面实现秒级的安全评级? zxcvbnm 是一款基于波斯纳算法(zxcvbn)的高性能 Dart 实现。它不是简单的正则匹配,而是扫描字典、日期、序列乃至常用键盘模式,给出一个 0 到

By Ne0inhk
Flutter for OpenHarmony: Flutter 三方库 fuzzywuzzy 为鸿蒙应用提供智能模糊搜索与文本匹配能力(交互体验升级助手)

Flutter for OpenHarmony: Flutter 三方库 fuzzywuzzy 为鸿蒙应用提供智能模糊搜索与文本匹配能力(交互体验升级助手)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 的应用搜索、通讯录查找或配置过滤功能开发时,用户经常会遇到拼写错误或输入不完整的尴尬。例如:用户想搜“HarmonyOS”,却输入了“Hrmny”。 1. 简单的 String.contains() 或 exact match 无法满足这种容错需求。 2. 如何在海量数据中根据“相似度”进行排序展示? fuzzywuzzy 软件包基于著名的 Levenshtein Distance(编辑距离)算法,为鸿蒙开发者提供了一套简单、高效的模糊文本匹配方案。它能通过计算字符间的变换代价,为输入结果打分,让你的鸿蒙应用瞬间具备“懂用户心声”的灵气。 一、文本相似度算法模型 fuzzywuzzy 计算两个字符串从 A 变换到 B 需要的最小操作步骤。 用户输入:

By Ne0inhk
从 App 到 Agent:鸿蒙应用形态正在改变

从 App 到 Agent:鸿蒙应用形态正在改变

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名) 大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。 我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案, 在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。 技术方向:前端 / 跨端 / 小程序 / 移动端工程化 内容平台:掘金、知乎、ZEEKLOG、简书 创作特点:实战导向、源码拆解、少空谈多落地 文章状态:长期稳定更新,大量原创输出 我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、

By Ne0inhk
【Linux:文件 + 进程】进程间通信进阶(2)

【Linux:文件 + 进程】进程间通信进阶(2)

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 * 7 ~> 消息队列 * 7.1 消息队列的概念 * 7.2 消息队列的原理 * 7.3 消息队列的接口 * 7.4 消息队列的一些命令 * 8 ~> 信号量 * 8.1 概念补充 * 8.1.1 共享资源和临界资源 * 8.1.2 互斥和同步

By Ne0inhk