前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySQL】数据库的操作(上)

【MySQL】数据库的操作(上)

原创
作者头像
Lin_Alpaca
发布2023-09-13 22:22:04
1370
发布2023-09-13 22:22:04
举报
文章被收录于专栏:MySQL.

目录

前言

创建数据库

编码集和校验集

不同校验集的区别

删除数据库

确认当前数据库

查看数据库属性

修改数据库属性

备份与还原

数据库和表的备份

还原

创建数据库

🎃在上一篇文章中便有简单讲过这个操作,但还有一些其他的细节仍未阐述,下面就一起来看一下吧。

代码语言:javascript
复制
create database (if not exists) 数据库名 (charset = 编码集 collate 校验集)
//括号中的为较上次增加的指令,实际写时并不用带上括号

🎃其中 if not exists 语句在创建对象前会先检查该对象是否已经存在,已存在便不会创建新对象。

🎃比如,当前状态下我已经存在了一个叫做 alpaca 的数据库,现在我要用这个命令再创建一个叫 alpaca 的数据库。

🎃若我们直接创建一个同名数据库,系统便会直接报错。

编码集和校验集

🎃在数据库名后,使用者还可以指定数据库的 字符集 和 校验集。

🎃其中字符集决定数据在写入时使用的编码,而校验集则是决定了读取时该以哪种形式进行读取。

🎃我们可以使用以下指令查看数据库支持的字符集和校验集

代码语言:javascript
复制
show charset;      //查看字符集
show collation;    //查看校验集

🎃通过查询字符集,我们可以看到一系列的信息,第一列为字符集名称, 第二列为对该字符集的描述,第三列表示该字符集对应的默认校验集,最后一列表示一个字符的最大大小(单位为字节)。

🎃那么,当我们没有自己决定使用的字符集和校验集时,使用的是哪一对呢?

🎃我们可以直接使用命令查询,或是通过查询配置文件得到答案。

代码语言:javascript
复制
show variables like 'character_set_database';    //查看默认字符集
show variables like 'collation_database';        //查看默认校验集

🎃打开 /etc/my.cnf 可以看到 mysql 的配置文件,我们可以找到默认设置的字符集为 utf8。

🎃不知道你是否还有印象,查看支持的字符集时,在第三列我们便能看到字符集默认的校验集,因此这里只规定字符集即可。

不同校验集的区别

🎃前面说过,校验集决定我们如何读取数据的形式,而同一种字符集一般会有多种校验集。

🎃我们就简单感受一下两个校验集的不同,平常直接使用系统默认的设定就足够了。

🎃现在,我们创建两个数据库,字符集都为 utf8,而一个校验集为 utf8_general_ci,另一个为 utf8_bin。

🎃之后在两个数据库中都创建一个表并插入相同的数据。

代码语言:javascript
复制
mysql> use d1;
Database changed
mysql> create table t1 ( c varchar(10) );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1 value('a');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('b');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 value('A');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('B');
Query OK, 1 row affected (0.01 sec)

mysql> use d2;
Database changed
mysql> create table t1 (c varchar(10));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1 value('a');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('b');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 value('A');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('B');
Query OK, 1 row affected (0.00 sec)

🎃现在,我们分别对表中的数据进行查询,会发现出现的结果不一样。同样是对 a 字符的查找,其中第一个数据库却连大写的 A 也查找出来了。这是因为,对于 utf8_general_ci 校验集来说,在读取时是不会进行大小写区分的,因此在他看来 a 和 A 是等价的。

🎃不同的校验集读取同样的数据可能会得到不同的结果,更多的性质还需要自己去了解。

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

删除数据库

🎃一般投入使用的数据库最好不要删除,仅作为了解。

代码语言:javascript
复制
drop database 数据库名

确认当前数据库

🎃我们都知道,在对数据库的表进行操作前,需要确保当前正处于目标数据库下。

🎃那我们该如何确定当前位于哪个数据库下呢?

代码语言:javascript
复制
select database();

🎃这个 database() 是一个函数,本质上就是我们通过 select 调用了这个函数,从而获取当前的位置。

查看数据库属性

🎃对于一个数据库,我们想要查看一下它的相关属性,了解他用了什么字符集和校验集,便可以使用。

代码语言:javascript
复制
show create database 数据库名

修改数据库属性

🎃当我们对于当前数据库的属性不满意时,相对其进行修改就可以使用这个命令。

代码语言:javascript
复制
alter database ... (后与create相同)

🎃与 create 的区别就只有第一个关键字不同而已,后面的语句我们就可以根据需要对字符集和校验集进行设置。

🎃如此,便完成了对数据库相应属性的修改。

备份与还原

🎃在使用数据库时,为了避免数据丢失会经常对数据库或表进行备份,接下来就一起来学习该如何进行数据库的备份吧。

数据库和表的备份

[注意]: 这个命令是借用了 mysql 的备份工具,即这个命令是在 Linux 命令行使用的,而不是 mysql 命令行。

代码语言:javascript
复制
mysqldump -P ... -u ... -p ... -B 数据库名1 数据库名2 ... > 存储备份的文件路径      //备份数据库

mysqldump -u ... -p ... 数据库名 表名1 表名2 ... > 存储备份的文件路径     //备份表

🎃这样我们就完成了数据库的备份,打开备份生成的文件,我们可以看到,其中的操作我们都十分熟悉,就是建立这个数据库时进行的操作。

🎃因此,数据库的备份本质上就是将建立该数据库的方法备份起来,恢复时只需要再使用一遍这些操作即可。

🎃值得注意的一点是,若备份时没有带上 -B选项,则恢复前需要先创建空的数据库并使用。

还原

🎃而还原的操作是在 mysql 命令行下使用的,只要输入备份文件的路径便可进行还原。

代码语言:javascript
复制
source 备份文件的路径
代码语言:javascript
复制
mysql> drop database d1;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| alpaca             |
| d2                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> source /root/MySQL/d1.sql;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| alpaca             |
| d1                 |
| d2                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

我正在参与 腾讯云开发者社区数据库专题有奖征文

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建数据库
    • 编码集和校验集
      • 不同校验集的区别
      • 删除数据库
      • 确认当前数据库
      • 查看数据库属性
      • 修改数据库属性
      • 备份与还原
        • 数据库和表的备份
          • 还原
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档