数据库从零开始:MySQL 中的 DDL 库操作详解【Linux版】

前言

在上一篇文章中,我们深入探讨了 MySQL 的基础知识,为大家奠定了坚实的理论基础。今天,我们将目光聚焦于 MySQL 最基础且至关重要的操作之一------数据库库级别的数据定义语言(DDL)操作,这是每一个数据库开发者和管理者必须精通的技能。

库级 DDL 操作是构建和管理数据库系统的基础,它涉及数据库对象的创建、修改和删除。通过本文,我们将详细讲解如何有效地进行数据库的管理,包括:

  1. 创建数据库的基本语法和注意事项

  2. 选择和切换数据库的正确方法

  3. 修改数据库字符集和校对规则

  4. 安全有效地删除数据库

接下来,让我们一步步揭开 MySQL 库操作的神秘面纱,帮助读者全面掌握这些核心技能。

1.创建数据库

我们先从数据库的创建开始讲起,相信看过我上篇文章的读者朋友见识过我常见数据库,上篇仅仅是为了让各位快速了解数据库,今天才是正事对它的讲解,下面我先带领各位看看它的语法。

1.1.语法

sql 复制代码
CREATE DATABASE [IF NOT EXISTS] db_name   #[]代表可写可不写
    [create_specification [,create_specification] ...]
#create_specification:
    #[DEFAULT] CHARACTER SET charset_name
    #[DEFAULT] COLLATE collation_name   这个是后面的字符集,等会在说

可能很多读者看到这个语法后都会觉得脑子痛痛的,小编当时学习的时候也是觉着很难受,所以我决定先不细讲这个语法,我们先从创建数据库简单的形式开始。

1.2.创建一个最简单的数据库

sql 复制代码
create database boke_1;  #最简单的一集,记着mysql末尾是需要分号的,类似写C++。

这条命令是创建一个叫做boke_1的数据库。并且可以创建成功,不过如果我们这样写的话其实是不太规范的,因为这里有一个陷阱------如果text_1在之前就创建过的话,服务器会无情的给你一个错误,如果是在写一个自动化部署的话,脚本会因此中断,这是比较致命的,所以我们需要创建数据库的时候,通过第一个\[\]的内容就可以部署第一道防线。

1.3.第一道防线:你的安全网:IF NOT EXISTS

想象一下,你在编写一个可以反复运行的初始化脚本。你肯定不希望每次运行都因为数据库已存在而失败。这时候,我们的第一个英雄登场了:**IF NOT EXISTS。**所以我们可以完善一下之前的代码。

sql 复制代码
CREATE DATABASE IF NOT EXISTS boke_1;

这句话的作用是:如果boke_1数据库已经存在了,那么就不会执行创建操作了,避免因为重复创建数据库而引发的错误。如果数据库不存在的话,那么mysql会创建该数据库。这样确保了脚本在多次执行的时候不会因为数据库已经存在而被中断了。

1.4.第二道防线:明确你的语言环境------设置字符集以及校对准则

虽然现在我们已经可以安全的创建出一个数据库了,但是如果你对数据存储的语言和排序规则有要求,比如你要存储中文、支持多语言,或者希望在比较字符串时不区分大小写,那就不能忽略另一个关键参数------字符集(Character Set)和校对规则(Collation)。

1.4.1.为什么要设置字符集

字符集决定了数据库如何存储字符,比如使用utf8就可以支持几乎所有语言的字符(包括emoji表情😄),而latin1则仅仅适合英文或者西欧的语言。

校对准则则会影响字符的比较方式,比如是否区分大小写、如何排序。例如:

  • utf8mb4_general_ci:不区分大小写(ci = case-insensitive)

  • utf8mb4_bin:区分大小写(bin = binary)

1.4.2.加入字符集和校对准则的写法

现在我们来完善前面的数据库创建语句。

sql 复制代码
CREATE DATABASE IF NOT EXISTS boke_1
DEFAULT CHARACTER SET utf8
COLLATE utf8mb4_general_ci;

这条语句做了以下几件事:

  1. 如果 boke_1 不存在则创建它;

  2. 使用 utf8mb4 字符集存储数据;

  3. 使用不区分大小写的方式来比较和排序字符串。

这样写,既安全又规范,是生产环境中比较推荐的做法,不过我之后写博客的时候,一般后面的字符集和校验准则是不会写的,我选择使用系统默认的字符集和校对准则,其实就是上面我写的,我早在配置mysql的时候就已经调好默认的字符集恶化校对准则了。【不会配置的可以看我上一篇文章】。

2.字符串和校验准则

虽然我在上面就已经讲述了字符串和校验准则是什么了,但是我仅仅就是简单的介绍一下,下面我带领着各位来看看mysql默认的字符串和校验准则都有什么。

2.1.查看系统默认字符集以及校验准则

输入下面的代码可以查看系统默认的字符集。

sql 复制代码
show variables like 'character_set_database';

可以看到系统当前的字符集的设置,可以看出是utf8。

输入下面的代码可以查看系统默认的校验准则。

sql 复制代码
show variables like 'collation_database';

可以看到系统默认的校验准则。

2.2.查看数据库中支持的字符集

可能很多读者疑惑数据库到底支持多少种字符集,输入下面的代码就可看到支持的字符集,其实还是比较多的。

sql 复制代码
show charset;

支持的字符集还是很多的,不过我还是推荐各位使用默认的utf8即可,因为它比较全能,还是比较好用的。

2.3.查看数据库支持的字符集校验准则

看完了数据库可以支持的字符集,我们当然也不能忘了字符集校验准则,同样的,一行代码我们也可以了解。

sql 复制代码
show collation;

上面是我截取的一点点,其实数据库支持的字符校验准则非常多,不过我还是那句话,用默认的就好,除非遇到一些特殊的情况,我们再加上就好了。

3.操纵数据库

接下来我们继续进行数据库相关的基本操作。当我们创建了多个数据库后,有时可能需要查看当前系统中已有多少个数据库。此时,我们将使用数据库操作中的第一条指令------查看数据库。

3.1.查看数据库

sql 复制代码
show databases;

上面的指令就是查看我们当前的数据库,就比如下图。

3.2.显示创建语句

可能有时候我们想要知道这个表创造的细节,那么我们可以输入下面的语句进行创建语句细节的查看。

sql 复制代码
show create database 数据库名;

3.3.修改数据库

可能有的时候我们想要去修改数据库的字符集或者校验规则,此时我们输入下面的指令就可以修改。

sql 复制代码
ALTER DATABASE 数据库名 CHARACTER SET 字符集名 COLLATE 校验规则名;

例如,如果我们想将数据库 mydb 的字符集修改为 utf8mb4,校验规则修改为 utf8mb4_general_ci,可以执行以下命令。

sql 复制代码
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

需要注意的是,修改字符集和校验规则可能会影响数据库中已有的数据,尤其是在涉及排序和比较的操作时。因此,建议在操作前备份数据库,并确认修改后的字符集和校验规则是否适用于当前数据需求。

3.4.删除数据库

有时,我们曾经一个创建好的数据库不同了,想要把它删除(但是一般来说,我们是不需要删除的,因为有风险),不过可能很多读者还是想要了解这个指令,所以我还是讲了。

sql 复制代码
drop database [if exists] 数据库的名字;    

\[\]里面的字符串的功能和创建数据库的一样,它是为了确保我们不删除一个不存在的数据库,如果没有它并且我们删除一个不存在的数据库,系统会报错,有了它就不会报错了,所以我们编写自动化脚本的时候风险就降低了。

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

有的时候,可能会有多个用户访问我们的mysql,当我们输入下面的指令就可以知道当前有哪些用户连接到了我们的服务器,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

sql 复制代码
show processlist;

4.小结

在本文中,我们深入探讨了 MySQL 中数据库库级别的基本操作,包括数据库的创建、字符集与校对规则的配置、以及数据库的管理与操作。通过一系列实际操作的示例,我们了解了如何:

  1. 使用简单语法创建数据库并通过 IF NOT EXISTS 防止重复创建错误;

  2. 配置数据库的字符集与校对规则,以确保数据库能够支持多语言和特定的字符比较需求;

  3. 使用一些基本的查询和修改语句,来查看数据库信息、修改数据库的字符集与校对规则、以及删除数据库;

  4. 在数据库管理中避免潜在的错误,确保操作的安全性与稳定性。

掌握这些基础操作不仅有助于提升日常数据库开发与维护的效率,也为后续更高级的数据库优化与管理打下了坚实的基础。在实际工作中,我们常常需要根据具体需求灵活运用这些操作,尤其是在构建自动化脚本和管理多个数据库时,更要确保操作的准确性和安全性。希望本文的分享能为您的 MySQL 数据库操作提供帮助和指导。一起学习的时光总是短暂的,各位大佬们,我们下一篇文章见啦!

相关推荐
IT枫斗者枫哥3 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
Flynt3 小时前
"MySQL搜不动就上ES"?我先在50万行数据上测了它自带的ngram全文索引
mysql·elasticsearch·搜索引擎
律宏阔3 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔3 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴3 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
Y003 小时前
PostgreSQL 的锁:为什么你的 ALTER TABLE 会卡住,以及怎么查
数据库·postgresql
imDwAaY3 小时前
Redo Log 和 Binlog 为什么需要两阶段提交?
后端·mysql
灰原喜欢柯南3 小时前
OceanBase 运维管理知识点——OCP 监控、诊断与变更控制
数据库·oceanbase
码农-0043 小时前
Springboot 集成 Ehcache操作数据库显示SQL语句设置
数据库·spring boot·sql
仍然.4 小时前
Redis---事务
数据库·redis