库的操作【MySQL】

文章目录

  • 创建数据库
  • 字符集和校验规则
    • 概念
    • 分类
    • 例子
  • 查看数据库
  • 显示创建语句
  • 修改数据库
  • 删除数据库
  • 备份和恢复
    • 备份
    • 恢复

创建数据库

SQL:

CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];

其中,大写的单词是关键字,使用时可以不大写, MySQL 会进行语法优化(本系列主要用小写,一是方便,二是可读性较好);[] 中表示可选项;SQL 必须以;结尾

  • CHARSET:指定数据库采用的编码格式。
  • COLLATE:指定数据库采用的校验规则。

如果在创建数据库时未制定编码格式或校验规则,MySQL 则使用配置文件中对应的默认选项。

直接创建名为test_db1的数据库,不指定其他属性:

mysql> create database test_db1;
Query OK, 1 row affected (0.00 sec)

创建数据库后,可以用USE <database_name>来打开数据库(实际上是进入这个数据库所在的目录)。

字符集和校验规则

概念

在 MySQL 中,字符集和校验规则决定了 MySQL 如何存储和比较字符串。简单地说:

  • 字符集是一套字符与编码的映射集合,字符集就是编码文字的格式,和语言有关,它决定了 MySQL 如何存储和显示字符串;
  • 校验规则是一套字符之间的比较规则,它决定了 MySQL 如何排序和比较字符串。校验规则会影响到 ORDER BY 语句的顺序,会影响到 WHERE 条件中大于小于号筛选出来的结果,会影响 DISTINCT、GROUP BY、HAVING 语句的查询结果。

不同的语言和场景可能需要不同的字符集和校验规则,所以 MySQL 允许用户自己选择或者指定。不同的字符集和校验规则会影响 MySQL 的性能和兼容性。

如果把字符集和校验规则比作是一本字典,那么:

  • 字符集就是字典里面的字母表,它告诉你每个字母对应的编码是什么。
  • 校验规则就是字典里面的排序规则,它告诉你如何按照字母顺序排列单词。

不同的语言可能有不同的字母表和排序规则,所以你需要选择合适的字典来查阅或者编写文字。

分类

字符集可以分为单字节字符集和多字节字符集,例如 ASCII、Latin1、GB18030、UTF8 等。每种字符集都有一个或多个校验规则,例如 utf8_general_ci、utf8mb4_0900_ai_ci 等。校验规则的命名通常遵循以下约定:

  • 以字符集名开头,如 utf8、gbk 等。
  • 以国家名或 general 居中,如 chinese、swedish、general 等。
  • 以 ci、cs 或 bin 结尾,分别表示大小写不敏感(case insensitive)、大小写敏感(case sensitive)或按二进制比较。

不同的校验规则有不同的性能和准确性,一般来说,以 _unicode_ci 结尾的校验规则比以 _general_ci 结尾的校验规则更准确,但也更慢。以 _bin 结尾的校验规则是按照编码值比较,所以是大小写敏感的。

MySQL 中可以为不同的层次设置字符集和校验规则,例如服务器层、数据库层、表层和列层。可以通过SHOW VARIABLES LIKE 'character_set_database'SHOW VARIABLES LIKE 'collation_set_database' 命令查看当前 MySQL 使用的字符集和校验规则。如果要修改某个层次的字符集或校验规则,可以使用 ALTER 命令或者在创建时指定。

例如查看test_db1的字符集和校验规则:

mysql> USE test_db1; # 进入数据库
mysql> SHOW VARIABLES LIKE 'character_set_database';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.00 sec)mysql> SHOW VARIABLES LIKE 'collation_set_database';
Empty set (0.00 sec)

注意,如果不使用USE关键字进入数据库test_db1,查看的就是 MySQL 默认的字符集或校验规则。

由于在创建时没有指定校验规则,所以这个数据库的校验规则是空,也就是没有默认的校验规则。

为什么 MySQL 没有默认的校验规则?每一个字符集都有一个或多个校验规则?

MySQL 没有默认的校验规则是因为不同的字符集和场景可能需要不同的校验规则,所以 MySQL 允许用户自己选择或者指定校验规则。校验规则会影响到字符串的存储、排序、比较和索引等操作,所以用户需要根据自己的需求来选择合适的校验规则。

例如,如果用户需要存储多种语言的字符串,或者需要区分大小写和重音等细节,那么可以选择 utf8mb4_unicode_ci 这样的校验规则。如果用户只需要存储中文或者英文,或者不关心大小写和重音等细节,那么可以选择 utf8mb4_general_ci 这样的校验规则。不同的校验规则会有不同的性能和准确性,所以用户需要权衡利弊,选择最适合自己的校验规则。

如果用户没有指定校验规则,那么 MySQL 会使用字符集对应的默认校验规则。例如在 MySQL5.7 中,utf8 字符集对应的默认校验规则是 utf8_general_ci。这样可以保证字符集和校验规则之间的一致性,避免出现乱码或者错误的比较结果。

查看数据库支持的字符集或校验规则:

image-20231021204414068 image-20231021204442691

例子

有字符集(编码格式)我可以理解,毕竟不同语言需要不同的格式,这样才不会显示乱码。但是校验规则存在的意义在哪里呢?

在演示例子之前,我们再用 摩尔斯电码 来类比:摩尔斯电码用点和划的不同组合,来表示 A~Z 这 26 个字母,从而实现非文字通信。那么发送和接收信息的过程,都需要按照这同一套规则来编码和解码。数据库在很多时候都是作为查询使用的,那么在查询时,实际上也是通过“对比”这个操作来查找的。如果查询的规则和写入的规则不一样,就算有这条数据,也无法找到。

上文提到,每个字符集都有一个或多个校验规则,这么做的原因是一种语言可能有不同的形式,以起到不同的作用。

下面以 utf8_general_ci 校验规则来创建一个person_test1数据库,并创建一个person1表:

# 创建数据库
mysql> create database person_test1 collate=utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
# 进入数据库
mysql> use person_test1;
Database changed
# 创建表
mysql> create table person1(-> name varchar(20)-> );
Query OK, 0 rows affected (0.02 sec)
# 插入两行数据
mysql> insert into person1 values ('AAAAA');
Query OK, 1 row affected (0.01 sec)mysql> insert into person1 values ('aaaaa');
Query OK, 1 row affected (0.00 sec)
# 输出表中的内容
mysql> select * from person1;
+-------+
| name  |
+-------+
| AAAAA |
| aaaaa |
+-------+
2 rows in set (0.00 sec)

查找名为aaaaa或者AAAAA的数据:

mysql> select * from person1 where name='aaaaa';
+-------+
| name  |
+-------+
| AAAAA |
| aaaaa |
+-------+
2 rows in set (0.00 sec)mysql> select * from person1 where name='AAAAA';
+-------+
| name  |
+-------+
| AAAAA |
| aaaaa |
+-------+
2 rows in set (0.00 sec)

由此可见,utf8_general_ci 不是大小写敏感的。可以用同样的方式创建数据库person_test2测试,utf8_general_cs 是大小写敏感的。

用这个语句查看某个数据库中某个表的字符集和比较规则:

select table_schema, table_name, table_collation from information_schema.tables where table_schema ='person_test1'and table_name='person1';
+--------------+------------+-----------------+
| table_schema | table_name | table_collation |
+--------------+------------+-----------------+
| person_test1 | person1    | utf8_general_ci |
+--------------+------------+-----------------+
1 row in set (0.00 sec)

同样地,以 utf8_bin 校验规则来创建一个person_test3数据库,并创建一个person3表:

mysql> create database person_test3 collate=utf8_bin;
Query OK, 1 row affected (0.00 sec)mysql> use person_test3;
Database changed
mysql> create table person1( name varchar(20) );
Query OK, 0 rows affected (0.02 sec)mysql> insert into person1 values ('aaaaa');
Query OK, 1 row affected (0.00 sec)mysql> insert into person1 values ('AAAAA');
Query OK, 1 row affected (0.00 sec)mysql> select * from person1;
+-------+
| name  |
+-------+
| aaaaa |
| AAAAA |
+-------+
2 rows in set (0.00 sec)mysql> select * from person1 where name='AAAAA';
+-------+
| name  |
+-------+
| AAAAA |
+-------+
1 row in set (0.00 sec)mysql> select * from person1 where name='aaaaa';
+-------+
| name  |
+-------+
| aaaaa |
+-------+
1 row in set (0.00 sec)

由此可见,utf8_bin 不是大小写敏感的,因为它按照二进制比较。

查看数据库

使用:

show databases;

来查看当前 MySQL 服务器中的所有数据库:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| person_test1       |
| person_test2       |
| person_test3       |
| sys                |
| test_db1           |
+--------------------+
8 rows in set (0.00 sec)

显示创建语句

show create database <database_name>;

在前面增加show关键字,可以查看数据库是如何执行 SQL 来创建数据库的。

image-20231021224654599

虽然我们输入时是用小写的关键字,但是 MySQL 会自动对用户输入的 SQL 做语法优化,将小写的关键字用大写字母代替,而且数据库的名字会用`(反引号,在 esc 下面)来包含,这么做是方式数据库的名称和关键字冲突。

另外,如果用户输入的 SQL 由多行组成,MySQL 会将;之前的所有字段合并为一句。

例如上面在创建表时,为了可读性,用了多行输入,但 MySQL 会优化如下:

image-20231021225313795

另外,MySQL 也有记忆指令的功能:

image-20231021225242469

注意,/*!40100 DEFAULT CHARACTER SET utf8 */不是注释,它表示当前 MySQL 版本如果大于 4.10,则执行后面的 SQL 语句。

MySQL 客户端会阻塞当前会话,如果不想新建会话的同时使用系统的命令行,可以在命令行指令前加system,例如:

system clear # 清屏
system ls -l

修改数据库

SQL:

ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name] [[DEFAULT] COLLATE=collation_name];

对数据库修改的内容主要是字符集和校验规则。

例如,将person_test1数据库的字符集改成 gbk,校验规则改为 gbk_bin:

image-20231021231421456

删除数据库

SQL:

DROP DATABASE [IF EXISTS] db_name;

创建一个数据库:

mysql> create database delete_test;mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| delete_test        |
| mysql              |
| performance_schema |
| person_test1       |
| person_test2       |
| person_test3       |
| sys                |
| test_db1           |
+--------------------+
9 rows in set (0.00 sec)

image-20231021234835215

删除它:

mysql> drop database delete_test;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| person_test1       |
| person_test2       |
| person_test3       |
| sys                |
| test_db1           |
+--------------------+
8 rows in set (0.00 sec)

当删除这个数据库后,这个路径下的同名目录也会被删除,即使里面有表。

备份和恢复

备份

命令行:

mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名 1 数据库名 2 ...  > 数据库备份存储的文件路径

创建一个数据库,并在里面创建两个表:

mysql> create database backup_test;
Query OK, 1 row affected (0.00 sec)mysql> use backup_test;
Database changed
mysql> create table teacher(-> age int,-> name varchar(20)-> );
Query OK, 0 rows affected (0.01 sec)mysql> create table student(-> age int,-> name varchar(20)-> );
Query OK, 0 rows affected (0.01 sec)

在这两个表中分别插入两条记录:

mysql> insert into teacher values (24, '李老师');
Query OK, 1 row affected (0.01 sec)mysql> insert into teacher values (34, '王老师')
Query OK, 1 row affected (0.00 sec)mysql> insert into student values (13, '小明');
Query OK, 1 row affected (0.00 sec)mysql> insert into student values (12, '小陈');
Query OK, 1 row affected (0.00 sec)
image-20231022000031989

在 Linux 命令行中(MySQL 是我创建的一个目录):

[root@xy MySQL]# mysqldump -P3306 -uroot -p -B backup_test > back.sql

这个文件保存了对数据库和表的所有 SQL 操作以及数据本身,并且是做了优化的:
image-20231022000808169

恢复

SQL:

source 数据库备份存储的文件路径

为了方便演示,将原来的数据库删除,然后再恢复。

mysql> source /home/xy/MySQL/back.sql;
image-20231022001255857

这样数据库中的所有内容都恢复了。

由此可见,数据库的备份就是将 MySQL 之前优化并记录的 SQL 语句拷贝一份;恢复就是将这些 SQL 语句交给 MySQL 服务器重新执行一遍。

注意,备份是服务端做的,而恢复是在客户端做的。

备份表的操作也是一样的,只不过需要在需要恢复的数据库中操作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xhadmin多应用Saas框架之超级SEO应用介绍

xhadmin是什么&#xff1f; xhadmin 是一套基于最新技术的研发的多应用 Saas 框架&#xff0c;支持在线升级和安装模块及模板&#xff0c;拥有良好的开发框架、成熟稳定的技术解决方案、提供丰富的扩展功能。为开发者赋能&#xff0c;助力企业发展、国家富强&#xff0c;致力于…

面对史上最难求职季,哪些测试技能更容易拿到offer?

在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位。这几年&#xff0c;各互联网大厂技术高速更新迭代&#xff0c;软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰&#xff0c;各种新的测试技术层出不穷&#xff0c;测试人员的薪资也水涨船高。与…

ChatGPT 助力英文论文翻译和润色

文章目录 一、前言二、主要内容1. 中英互译2. 中文润色3. 英文润色 三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着全球化的推进&#xff0c;跨文化交流变得越来越重要。在学术领域&#xff0c;英文论文的质量对于研究成果的传…

JAVA设计模式全解(独家AI解析)

JAVA设计模式全解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…

nginx配置负载均衡--实战项目(适用于轮询、加权轮询、ip_hash)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

制药企业固体制剂设备管理及维护要点

在制药企业的生产过程中&#xff0c;固体制剂设备是至关重要的一环。有效管理和维护这些设备对于确保生产质量、提高生产效率以及延长设备寿命至关重要。本文将从以下三个方面介绍制药企业固体制剂设备的主要类型、常见管理问题以及设备维护的关键要点。 制药企业固体制剂设备主…

java智慧工地云平台源码,以物联网、移动互联网技术为基础,结合大数据、云计算等,实现工程管理绿色化、数字化、精细化、智能化的效果

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;围绕人、机、料、法、环等各方面关键因素&#xff0c;彻底改变传统建筑施工现场参建各方现场管理的交互方式、工作方式和管理模式&#xff0c;智…

分析概览 文章管理 草稿管理 图片管理 站点管理 主站 关于 登出 手写操作系统项目----进程

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 这里记录了&#xff0c;手写操作系统项目中关于进程的部分。 进程四要素 首先进程有四要素。 …

Linux软件包和进程管理

一、RPM软件包管理 1、RPM管理工具 &#xff08;1&#xff09;RPM是红帽包管理(Redhat Package Manager)的缩写。 由Red Hat公司提出的一种软件包管理标准。 是Linux各发行版中应用最广泛的软件包格式之一&#xff08;还有debian的发行版deb安装包&#xff09;。 RPM功能通过…

数据结构:选择题+编程题(每日一练)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;单值二叉树 思路一&#xff1a; 题二&#xff1a;二叉树的最大深度 思路一&#xff1a; 本人实力有限可能对…

MySQL的索引——索引的介绍及其数据结构B+树 索引的类型 索引的使用及其失效场景 相关名词解释

前言 索引是存储引擎用于快速查找数据纪录的一种数据结构&#xff0c;索引是数据库中经常提及的一个词&#xff0c;究竟什么是索引&#xff0c;索引的数据结构是什么&#xff0c;索引有什么类型&#xff1f; 本篇博客尝试阐述数据库索引的相关内容&#xff0c;涉及什么是索引…

用 Java 在 PDF 中创建和管理图层,实现交互式文档

PDF 图层&#xff08;也称为可见图层或附加图层等&#xff09;是组织和管理 PDF 文档中内容可见性的一种方法。PDF 图层可用于创建交互式文档、隐藏或显示特定信息、创建多语言版本文档等。通过添加和删除图层&#xff0c;用户可以根据需要定制 PDF 文档指定内容的可见性与显示…

适用于物联网的UI设计工具都有哪些?

随着科学技术的飞速发展&#xff0c;“万物相连的互联网”时代逐渐成为现实。如今&#xff0c;物联网已经不是什么新词了。事实上&#xff0c;早在各种屏幕设备诞生之前&#xff0c;人们就与物理世界交织在一起&#xff0c;产生了无数的互动。如何将人们多年积累的互动经验与物…

蓝桥杯 Java 青蛙过河

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改/**二分法从大&#xff08;n&#xff09;到小找足够小的步长前缀和记录每个位置的前面有的总石头数&#xff08;一个石头表示可以容纳一个青蛙&#xff0c;一位置有多少个石头hi就是多少&#xff09;&…

025-第三代软件开发-实现需求长时间未操作返回登录界面

第三代软件开发-实现需求长时间未操作返回登录界面 文章目录 第三代软件开发-实现需求长时间未操作返回登录界面项目介绍实现需求长时间未操作返回登录界面实现思路用户操作监控QML 逻辑处理 关键字&#xff1a; Qt、 Qml、 QTimer、 timeout、 eventFilter 项目介绍 欢迎…

秋季期中考复现xj

flow analysis 1 What is the backdoor file name that comes with the server?( Including file suffix) 服务器自带的后门文件是什么&#xff1f;&#xff08;含文件后缀&#xff09; 题目还要求最后把那个文件名MD5一下&#xff0c;再去提交 开始的前三题是流量分析的&…

发挥服务器的无限潜能:创意项目、在线社区和更多

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

设计模式:观察者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《命令模式》 下一篇《策略模式》 简介&#xff1a; 观察者模式&#xff0c;它是一种行为型设计模式&#xff0c;它允许一个对象自动通知其依赖者&#xff08;观察者&#xff09;状态的变化。当被…

Windows Server服务器下的Linux子系统

导读Windows、Linux看似死敌一对&#xff0c;但其实微软对于开源实业还是相当支持的&#xff0c;Windows 10系统内就首次内置了一个Linux子系统(Windows Subsystem for Linux/WSL)&#xff0c;允许开发者模拟Linux环境&#xff0c;而且有需要的可以直接从Windows应用商店下载SU…

顺序栈的实现----数据结构

栈的概念 对于栈&#xff08;Stack&#xff09;&#xff0c;后进先出&#xff08;Last In First Out&#xff0c;LIFO&#xff09;&#xff0c;栈也是一种线性表&#xff0c;只不过是一种操作受限的线性表&#xff0c;只能在一端操作&#xff0c;也就是不允许在中间进行查找、…