数据库---Day2 数据库操作

本系列可作为数据库学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。

点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励!

系列文章目录

JAVA初阶---------已更完

JAVA数据结构---------已更完

数据库---Day 1 数据库基础

数据库---Day2 数据库操作

数据库---Day3 数据类型

数据库---Day4 数据表的操作

数据库---Day5 数据表的增删改查


目录

目录

系列文章目录

目录

前言

一、本节核心学习目标

二、查看数据库:快速知晓服务器中已存在的库

[2.1 核心语法](#2.1 核心语法)

[2.2 关键语法细节](#2.2 关键语法细节)

[2.3 实操示例](#2.3 实操示例)

三、创建数据库:灵活配置,安全建库

[3.1 完整官方语法](#3.1 完整官方语法)

[3.2 语法符号专属含义解析](#3.2 语法符号专属含义解析)

[3.3 核心关键字说明](#3.3 核心关键字说明)

[3.4 不同场景的建库实操示例](#3.4 不同场景的建库实操示例)

[3.4.1 场景 1:基础建库 ------ 直接创建指定名称的数据库](#3.4.1 场景 1:基础建库 —— 直接创建指定名称的数据库)

[3.4.2 场景 2:安全建库 ------ 判断不存在则创建(开发推荐)](#3.4.2 场景 2:安全建库 —— 判断不存在则创建(开发推荐))

[3.4.3 场景 3:查看建库警告信息 ------ 定位重复建库问题](#3.4.3 场景 3:查看建库警告信息 —— 定位重复建库问题)

[3.4.4 场景 4:自定义配置建库 ------ 指定字符集 + 排序规则(生产必备)](#3.4.4 场景 4:自定义配置建库 —— 指定字符集 + 排序规则(生产必备))

[3.4.5 场景 5:高级配置建库 ------ 指定加密属性(MySQL8.0.16+)](#3.4.5 场景 5:高级配置建库 —— 指定加密属性(MySQL8.0.16+))

[四、字符集编码与排序规则:数据库的 "语言基础"](#四、字符集编码与排序规则:数据库的 “语言基础”)

[4.1 核心关联关系](#4.1 核心关联关系)

[4.2 查看 MySQL 支持的字符集和排序规则](#4.2 查看 MySQL 支持的字符集和排序规则)

[4.2.1 查看所有支持的字符集](#4.2.1 查看所有支持的字符集)

[4.2.2 查看所有支持的排序规则](#4.2.2 查看所有支持的排序规则)

[4.3 排序规则命名规范与关键字解析](#4.3 排序规则命名规范与关键字解析)

[4.4 查看 MySQL 系统级默认字符集和排序规则](#4.4 查看 MySQL 系统级默认字符集和排序规则)

[4.4.1 查看系统所有字符集相关变量](#4.4.1 查看系统所有字符集相关变量)

[4.4.2 查看系统所有排序规则相关变量](#4.4.2 查看系统所有排序规则相关变量)

五、查看数据库创建语句:溯源库的完整配置

[5.1 核心语法](#5.1 核心语法)

[5.2 实操示例:查看 java01 库的创建语句](#5.2 实操示例:查看 java01 库的创建语句)

[5.3 创建语句深度解析(新手必看)](#5.3 创建语句深度解析(新手必看))

[5.4 拓展用法:查看系统默认库的创建语句](#5.4 拓展用法:查看系统默认库的创建语句)

六、修改数据库:仅改配置,不改数据

[6.1 完整官方语法](#6.1 完整官方语法)

[6.2 语法关键细节](#6.2 语法关键细节)

[6.3 不同场景的修改实操示例](#6.3 不同场景的修改实操示例)

[6.3.1 场景 1:基础修改 ------ 仅修改数据库的字符集](#6.3.1 场景 1:基础修改 —— 仅修改数据库的字符集)

[6.3.2 场景 2:进阶修改 ------ 同时修改字符集和排序规则](#6.3.2 场景 2:进阶修改 —— 同时修改字符集和排序规则)

[6.3.3 场景 3:高级修改 ------ 设置数据库为只读状态](#6.3.3 场景 3:高级修改 —— 设置数据库为只读状态)

[6.3.4 场景 4:高级修改 ------ 修改数据库加密属性(8.0.16+)](#6.3.4 场景 4:高级修改 —— 修改数据库加密属性(8.0.16+))

七、删除数据库:高危操作,谨慎执行

[7.1 核心语法](#7.1 核心语法)

[7.2 语法关键细节](#7.2 语法关键细节)

[7.3 实操示例](#7.3 实操示例)

[7.3.1 安全删除:判断存在则删除(唯一推荐写法)](#7.3.1 安全删除:判断存在则删除(唯一推荐写法))

[7.3.2 验证删除结果](#7.3.2 验证删除结果)

[7.4 删库操作的核心避坑原则(必看)](#7.4 删库操作的核心避坑原则(必看))

[7.4.1 开发 / 测试环境避坑](#7.4.1 开发 / 测试环境避坑)

[7.4.2 生产环境严令禁止](#7.4.2 生产环境严令禁止)

[八、MySQL 库操作核心总结:语法 + 规范 + 避坑](#八、MySQL 库操作核心总结:语法 + 规范 + 避坑)

[8.1 四大核心操作完整语法速查表(含推荐写法)](#8.1 四大核心操作完整语法速查表(含推荐写法))

[8.2 字符集与排序规则核心规范(从根源避坑)](#8.2 字符集与排序规则核心规范(从根源避坑))

[8.3 库操作通用开发规范(团队协作必备)](#8.3 库操作通用开发规范(团队协作必备))

九、后续学习方向

总结


前言

小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!

在上一篇数据库基础内容中,我们搭建了 MySQL 的基础认知体系,包括安装配置、架构原理和 SQL 基础分类。本次内容将聚焦 MySQL数据库(库) 的全流程操作,从基础的查看、创建,到进阶的字符集与排序规则配置,再到修改、删除的实操细节,进行逐点拆解、深度讲解。掌握库的操作是 MySQL 实操的入门关键,也是后续表、数据操作的基础,同时正确的字符集配置能从根源避免数据乱码问题,让数据库设计更规范、更健壮。

一、本节核心学习目标

  1. 精通 MySQL 数据库创建、查看、修改、删除四大核心操作的完整语法、常用写法及避坑要点
  2. 深度理解字符集编码与排序规则的本质含义、关联关系及 MySQL 版本差异
  3. 学会在创建 / 修改数据库时精准指定字符集和排序规则,打造适配业务的数据库基础配置
  4. 掌握库操作的实操规范和高危操作的避坑技巧,适配开发、测试、生产多环境需求

二、查看数据库:快速知晓服务器中已存在的库

查看数据库是最基础的入门操作,用于查询当前 MySQL 服务器中所有已创建的数据库,包括系统默认库和自定义库,语法简单且支持大小写不敏感,是日常操作的高频指令。

2.1 核心语法

sql 复制代码
show databases;

show是一个关键字 表示的是要执行的操作类型,作用显示某些信息。

要加分号!

如果第一行没有写分号,按回车之后会另起一行,继续去写未完成的SQL,直到遇见分号为止。

如果写了很多的SQL 中途发现写错了,想要重新开始养,可以使用ctrl+C

2.2 关键语法细节

  1. 复数形式要求 :关键字必须是databases (复数),若写成show database;会直接报语法错误,这是新手最易踩的坑
  2. 大小写无关 :MySQL 关键字不区分大小写,SHOW DATABASES;show databases;Show Databases;执行结果一致
  3. 执行结果说明 :执行后会返回一个表格,包含所有数据库名称,其中mysqlsysperformance_schemainformation_schema是 MySQL 的系统默认库,分别用于存储权限信息、系统配置、性能监控、数据库元数据,切勿随意修改或删除。

2.3 实操示例

这四个是系统级别的库(自带的),记录mysql自身的一些配置,性能,系统变量信息 如果不明白他的具体作用,千万不要改动,更不能删除,如果改错了,或者删除了,MYSQL无法启动。

如果没有备份的情况下,只能重新安装数据库服务了。

每次使用数据库时,只使用自己创建的数据库,别的不管是啥名字都不要动。

使用 \? 获取帮助和指导

上述结果为 MySQL 全新安装后的默认库列表,后续自定义创建的库会新增到该列表中。

三、创建数据库:灵活配置,安全建库

创建数据库是开发中最常用的操作,MySQL 提供了灵活且安全 的创建语法,支持判断数据库是否存在指定字符集 / 排序规则设置数据库加密等多种配置项,既满足基础建库需求,也能适配复杂的业务场景,同时避免重复建库、关键字冲突等问题。

3.1 完整官方语法

sql 复制代码
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ...

# 可选配置项(create_option)详细语法
create_option: [DEFAULT] {
  CHARACTER SET [=] charset_name  # 指定数据库字符集编码
  | COLLATE [=] collation_name    # 指定数据库字符集的排序/校验规则
  | ENCRYPTION [=] {'Y' | 'N'}    # 数据库是否加密,MySQL 8.0.16版本新增特性
}

1. 大括号表示必须要有这个关键字,里面的 | 是 或的意思,也就是说database和schema必须写一个,他们都表示数据库的意思。

2. 中括号表示可有可无,也就是说是可选项,当前这里写的if not exists表示如果不存在则创建数据库

3. db_name : 用户自定义内容,这里就是数据库的名字。

4. MYSQL允许开发者使用关键字命名,但是在使用是要用反引号把关键字引起来,反引号在键盘中的位置,ESC下边,TAB上边,1的左边,要用英文符号。

5. 这些规则在MYSQL文档中都是通用的,在编程界大多数的语法描述也是这套规则。

Test:

创建一个名字为java113的数据库(大小写不敏感,选择哪个都可以)

sql 复制代码
#1.先看一下当前有没有要创建的数据库  show databases;
#2.根据语法规则创建一个名字为java113的数据库。
create database if not exists java113;
CREATE DATABASE IF NOT EXISTS java113;
#3.检查是否创建成功 show databases;
3.1.1 实操示例
sql 复制代码
Query OK, 1 row affected (0.08 sec)

#Query OK  执行结果
#1 row affected 受影响的行数,对于成功创建一个数据库返回就是一条成功记录(信息)
#0.08 sec 执行时间 意义不大

如果数据库已经存在,会提示报错。可以使用 show warnings; 查看报错!

如果不加if not exists 直接报错!

在真实的工作中,执行SQL语句,不是手动一条一条执行的,而是批量一起执行,为了不想某一条语句的错误影响整个执行流程,都会加上一些类似于if not exists 的校验,防止因为某条SQL出错导致整个SQL中断执行。

sql 复制代码
# 可选配置项(create_option)详细语法
create_option: [DEFAULT] {
  CHARACTER SET [=] charset_name  # 指定数据库字符集编码
  | COLLATE [=] collation_name    # 指定数据库字符集的排序/校验规则
  | ENCRYPTION [=] {'Y' | 'N'}    # 数据库是否加密,MySQL 8.0.16版本新增特性
}

#CHARACTER SET [=] charset_name  # 指定数据库字符集编码
#
#8.0中默认的字符集是utf8mb4
#5.7中默认的字符集是latin1 :不能存储中文
#创建数据库的时候强烈建议大家手动明确认定字符集

#COLLATE [=] collation_name    # 指定数据库字符集的排序/校验规则
#
#8.0中默认是utf8mb4_0900_ai_ci : 从8.0开始才支持   ai 口音不敏感     ci 大小写不敏感
#5.7中默认是utf8mb4_general_ci 

TEST: 创建一个名为test_db01的数据库,并指定字符集和排序规则

sql 复制代码
create database if not exists test_db03 character set utf8mb4 collate utf8mb4_0900_ai_ci;

查看当前数据库服务全局的默认字符集

3.2 语法符号专属含义解析

MySQL 语法中的特殊符号有固定且严格的含义,准确理解这些符号是读懂、写对 MySQL 语句的基础,本语法中涉及的符号如下:

sql 复制代码
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ...

# 可选配置项(create_option)详细语法
create_option: [DEFAULT] {
  CHARACTER SET [=] charset_name  # 指定数据库字符集编码
  | COLLATE [=] collation_name    # 指定数据库字符集的排序/校验规则
  | ENCRYPTION [=] {'Y' | 'N'}    # 数据库是否加密,MySQL 8.0.16版本新增特性
}
符号 含义 示例
{} 大括号内为必选内容,需从中选择其一 {DATABAS | ESCHEMA}:必须选 DATABASE 或 SCHEMA
| 竖线表示多选一,即符号前后的内容只能选一个 {DATABAS | ESCHEMA} :必须选 DATABASE 或 SCHEMA
[] 中括号内为可选项,根据业务需求选择添加,不添加则使用默认值 [IF NOT EXISTS]:可选加,用于判断库是否存在
... 省略号表示可重复添加多个同类型配置项 可同时指定 CHARACTER SET 和 COLLATE
[=] 等号可选,写或不写均不影响执行结果 CHARACTER SET utf8mb4CHARACTER SET = utf8mb4一致

3.3 核心关键字说明

  1. DATABASE / SCHEMA :二者含义完全一致,均可表示 "数据库",CREATE DATABASE是通用写法,CREATE SCHEMA为兼容其他数据库的写法,日常开发使用DATABASE即可
  2. IF NOT EXISTS :建库前先判断指定名称的数据库是否存在,存在则不执行创建操作,不存在则创建 ,是开发中必加的安全配置,避免重复建库报错
  3. db_name :自定义数据库名,命名需遵循 MySQL 规范:由字母、数字、下划线组成,不能以数字开头,避免使用 MySQL 关键字(如 database、table、user),建议使用小写字母 + 下划线的命名方式(如 bit_mall、java01_test)

3.4 不同场景的建库实操示例

根据业务需求的不同,创建数据库分为基础建库安全建库自定义配置建库三种场景,以下逐一讲解并附执行结果解析。

3.4.1 场景 1:基础建库 ------ 直接创建指定名称的数据库

语法create database 数据库名;

实操:创建名为 test001 的数据库

sql 复制代码
mysql> create database test001;
Query OK, 1 row affected (0.01 sec)

结果解析Query OK表示执行成功,1 row affected表示影响行数,0.01 sec表示执行耗时。

底层变化 :数据库创建成功后,MySQL 会在数据存储目录下自动生成一个与数据库同名的文件夹,该文件夹用于保存该数据库中所有的表、数据、索引等相关文件。

3.4.2 场景 2:安全建库 ------ 判断不存在则创建(开发推荐)

语法create database if not exists 数据库名;

实操:创建名为 testdb 的数据库,若已存在则不执行

sql 复制代码
# 首次执行(testdb不存在)
mysql> create database if not exists testdb;
Query OK, 1 row affected (0.01 sec)

# 重复执行(testdb已存在)
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.01 sec)

结果解析 :重复执行后出现1 warning(警告),而非报错,这是IF NOT EXISTS的核心作用 ------容错性建库,避免程序中重复执行建库语句导致服务异常。

3.4.3 场景 3:查看建库警告信息 ------ 定位重复建库问题

重复执行安全建库语句出现警告后,可通过show warnings;语句查看具体警告原因,快速定位问题。

实操

sql 复制代码
mysql> show warnings;
+-------+------+-----------------------------------------------+
| Level | Code | Message                                       |
+-------+------+-----------------------------------------------+
| Note  | 1007 | Can't create database 'testdb'; database exists |
+-------+------+-----------------------------------------------+
1 row in set (0.00 sec)

结果解析 :警告级别为Note(提示),错误码 1007,明确提示 "无法创建数据库 testdb,该数据库已存在",无实际错误,仅做信息提示。

3.4.4 场景 4:自定义配置建库 ------ 指定字符集 + 排序规则(生产必备)

这是生产环境的标准建库写法,在安全建库的基础上,手动指定字符集和排序规则,避免因系统默认配置差异导致数据乱码,后续所有表会默认继承该库的配置。

语法create database if not exists 数据库名 character set 字符集 collate 排序规则;

实操:创建名为 java01 的数据库,指定字符集为 utf8mb4,排序规则为 utf8mb4_0900_ai_ci

sql 复制代码
mysql> create database if not exists java01 character set utf8mb4 collate utf8mb4_0900_ai_ci;
Query OK, 1 row affected (0.02 sec)

核心意义:统一数据库的字符编码和排序规则,从根源解决中文乱码、字符排序异常等问题,是企业开发的通用规范。

3.4.5 场景 5:高级配置建库 ------ 指定加密属性(MySQL8.0.16+)

MySQL8.0.16 及以上版本支持数据库加密,通过ENCRYPTION='Y'/'N'指定,Y表示加密,N表示不加密(默认值)。

实操:创建加密的数据库 encrypt_db

sql 复制代码
mysql> create database if not exists encrypt_db character set utf8mb4 encryption='Y';
Query OK, 1 row affected (0.03 sec)

注意 :数据库加密需依赖 MySQL 的加密插件,若未配置插件,执行该语句会报错,日常开发若无特殊加密需求,使用默认值N即可。

四、字符集编码与排序规则:数据库的 "语言基础"

字符集编码(Character Set)决定了 MySQL如何存储字符数据 (如中文、英文、emoji),排序规则(Collation)决定了 MySQL如何比较、排序、匹配字符数据(如判断 A 和 a 是否相同、中文按什么规则排序),二者是数据库的 "语言基础",紧密关联、缺一不可,也是新手最易忽略且最易踩坑的知识点。

4.1 核心关联关系

  1. 一一对应:每一个字符集都对应一套专属的排序规则,一个排序规则只能属于一个字符集
  2. 继承性 :数据库的字符集和排序规则会被表继承 ,表的配置又会被字段继承,即 "库→表→字段" 的继承链
  3. 默认性:若创建库 / 表 / 字段时未手动指定,会自动使用上一级的默认配置(如库使用服务器默认,表使用库默认)

4.2 查看 MySQL 支持的字符集和排序规则

MySQL 支持数十种字符集和上百种排序规则,可通过专用语句查看所有支持的配置,同时快速定位默认配置。

4.2.1 查看所有支持的字符集

语法show charset;(或show character set;,二者等价)

核心作用:查看 MySQL 支持的所有字符集,包括字符集描述、默认排序规则、最大字符长度。

关键默认值

  • MySQL8.0默认字符集utf8mb4(推荐使用,兼容所有 Unicode 字符)
  • MySQL5.7默认字符集latin1(不支持中文,需手动修改,这是 5.7 版本中文乱码的核心原因)

utf8 与 utf8mb4 的核心区别

  • utf8:MySQL 中的伪 utf8,最多使用 3 个字节存储字符,不支持 emoji 表情,也不支持部分生僻汉字
  • utf8mb4:真正的 UTF-8 编码,最多使用 4 个字节存储字符,支持所有中文、emoji 表情、生僻汉字 ,是 MySQL8.0 的默认值,也是开发首选字符集
4.2.2 查看所有支持的排序规则

语法show collation;

核心作用:查看 MySQL 支持的所有排序规则,包括对应的字符集、是否区分大小写 / 重音。

关键默认值

  • MySQL8.0默认排序规则utf8mb4_0900_ai_ci(适配 utf8mb4 字符集)
  • MySQL5.7默认排序规则utf8mb4_general_ci(适配 utf8mb4 字符集)

4.3 排序规则命名规范与关键字解析

MySQL 的排序规则命名有统一的规范 ,通过名称即可快速判断其核心特性,以主流的utf8mb4_0900_ai_ci为例,各部分含义如下,这是理解排序规则的关键:

sql 复制代码
utf8mb4_0900_ai_ci
├─ utf8mb4:对应的字符集,排序规则与字符集绑定
├─ 0900:基于UCA 9.0.0算法(UCA=Unicode Collation Algorithm,Unicode官方排序算法),算法版本越高,排序规则越精准
├─ ai:Accent-insensitive,**重音不敏感**(如a、á、à视为同一个字符,不区分重音)
└─ ci:Case-insensitive,**大小写不敏感**(如A、a视为同一个字符,不区分大小写)

除了aici,排序规则中还有其他常用关键字,对应不同的匹配规则:

关键字 英文全称 含义 适用场景
as Accent-sensitive 重音敏感 需严格区分重音的场景(如欧美多语言业务)
cs Case-sensitive 大小写敏感 需严格区分大小写的场景(如用户账号、密码存储)
bin Binary 二进制排序 按字符的 ASCII 码值比较,大小写 / 重音均敏感,排序最精准

示例utf8mb4_0900_cs_as表示:适配 utf8mb4 字符集、基于 UCA9.0.0 算法、大小写敏感、重音敏感的排序规则。

4.4 查看 MySQL 系统级默认字符集和排序规则

可通过show variables like语句查询服务器级、数据库级 的默认字符集和排序规则,确认全局配置,避免因配置不一致导致问题。该语句使用通配符 % 匹配相关变量,是 MySQL 查询系统变量的高频用法。

4.4.1 查看系统所有字符集相关变量

语法show variables like '%character%';

实操结果与解析

sql 复制代码
mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8mb4                                   | -- 客户端发送数据的字符集
| character_set_connection | utf8mb4                                   | -- 连接层的字符集
| character_set_database   | utf8mb4                                   | -- 数据库默认字符集
| character_set_filesystem | binary                                    | -- 文件系统的字符集,固定为binary
| character_set_results    | utf8mb4                                   | -- 服务器返回结果的字符集
| character_set_server     | utf8mb4                                   | -- 服务器默认字符集
| character_set_system     | utf8mb3                                   | -- 系统元数据的字符集,固定为utf8mb3
| character_sets_dir       | D:\Program Files\MySQL\Server 8.0\charsets\ | -- 字符集文件存储目录
+--------------------------+-------------------------------------------+
8 rows in set, 1 warning (0.00 sec)

核心关注character_set_database(数据库默认)和character_set_server(服务器默认),MySQL8.0 中二者均为utf8mb4,MySQL5.7 中二者默认为latin1,需手动修改。

4.4.2 查看系统所有排序规则相关变量

语法show variables like '%collation%';

实操结果与解析

sql 复制代码
mysql> show variables like '%collation%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci | -- 连接层的排序规则
| collation_database   | utf8mb4_0900_ai_ci | -- 数据库默认排序规则
| collation_server     | utf8mb4_0900_ai_ci | -- 服务器默认排序规则
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci | -- utf8mb4的默认排序规则
+----------------------+--------------------+
4 rows in set, 1 warning (0.00 sec)

核心关注collation_databasecollation_server,MySQL8.0 中二者均为utf8mb4_0900_ai_ci,是开发中最通用的排序规则,满足 99% 的业务需求。

五、查看数据库创建语句:溯源库的完整配置

创建数据库后,可通过show create database语句查看该数据库的完整创建语句 ,包括系统自动补充的默认配置(如加密、注释),核心作用是验证库的配置是否符合预期复刻数据库配置排查配置相关问题,是日常操作的高频指令。

5.1 核心语法

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

5.2 实操示例:查看 java01 库的创建语句

sql 复制代码
mysql> show create database java01;
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                 |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| java01   | CREATE DATABASE `java01` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

5.3 创建语句深度解析(新手必看)

上述结果中的创建语句包含多个易混淆的细节,并非简单的手动输入语句,而是 MySQL 补充后的完整语句,逐一解析如下:

  1. 数据库名的反引号 `` :将数据库名包裹在反引号中,是 MySQL 的规范写法 ,核心作用是避免数据库名与 MySQL 关键字冲突 。例如若数据库名是table(MySQL 关键字),不加反引号会报错,加反引号则可正常识别。
  2. /*!40100 ... */这不是注释 ,而是 MySQL 的版本条件执行语法 ,含义是:当当前 MySQL 服务器的版本大于等于 4.01.00 时,执行该语句内的内容;若版本低于 4.01.00,则忽略该内容。作用是提升语句的版本兼容性。
  3. /*!80016 DEFAULT ENCRYPTION='N' */ :同理,版本条件执行语法,含义是:当当前 MySQL 版本大于等于 8.0.16 时,设置数据库默认加密属性为 N(不加密);若版本低于 8.0.16,因不支持加密特性,直接忽略该内容。
  4. DEFAULT :默认关键字,可省略,DEFAULT CHARACTER SET utf8mb4CHARACTER SET utf8mb4执行结果一致,MySQL 自动补充该关键字让语句更规范。

5.4 拓展用法:查看系统默认库的创建语句

通过该语句也可查看 MySQL 系统默认库的配置,了解系统库的字符集和排序规则,例如查看 mysql 库:

sql 复制代码
show create database mysql;

注意:系统默认库的配置请勿随意修改,否则可能导致 MySQL 服务异常。

六、修改数据库:仅改配置,不改数据

MySQL 中对数据库的修改操作仅针对配置项 ,无法修改数据库名称,核心可修改的配置包括:字符集编码、排序规则、加密属性、只读属性,其中修改字符集和排序规则是开发中最常用的操作,修改后仅对后续新建的表生效,已存在的表不会自动继承新配置。

6.1 完整官方语法

sql 复制代码
ALTER {DATABASE | SCHEMA} [db_name] alter_option ...

# 可选修改配置项(alter_option)详细语法
alter_option: {
  [DEFAULT] CHARACTER SET [=] charset_name  # 修改数据库默认字符集
  | [DEFAULT] COLLATE [=] collation_name    # 修改数据库默认排序规则
  | [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}    # 修改数据库加密属性(8.0.16+)
  | READ ONLY [=] {DEFAULT | 0 | 1}         # 设置数据库只读属性,1=只读,0=可读写
}

6.2 语法关键细节

  1. db_name 的可选性 :若当前已通过use 数据库名;切换到目标数据库,可省略db_name,直接写ALTER DATABASE alter_option ...;若未切换数据库,必须指定db_name,否则会修改当前默认数据库的配置
  2. 修改范围限制 :仅能修改数据库的全局配置项,无法修改数据库名称,若需修改库名,只能通过 "新建库 + 迁移数据 + 删除旧库" 的方式实现
  3. 生效范围 :修改后的配置仅对后续新建的表 / 字段生效,已存在的表 / 字段仍使用修改前的配置,需单独修改表 / 字段的配置才能同步更新

补:选择要操作的数据库

use 数据库名[;] 切换(选择)数据库成功

select database(); 查看当前选择(操作)的是哪个数据库

6.3 不同场景的修改实操示例

6.3.1 场景 1:基础修改 ------ 仅修改数据库的字符集

实操将 test001 库的字符集从默认的 utf8mb4 修改为 gbk

sql 复制代码
# 未切换数据库,指定库名修改
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)

# 验证修改结果
mysql> show create database test001;
+----------+-------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                   |
+----------+-------------------------------------------------------------------------------------------------+
| test001  | CREATE DATABASE `test001` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

结果解析DEFAULT CHARACTER SET已从 utf8mb4 变为 gbk,修改成功。

6.3.2 场景 2:进阶修改 ------ 同时修改字符集和排序规则

实操:将 test001 库的字符集改回 utf8mb4,排序规则改为 utf8mb4_0900_ai_ci(推荐配置)

sql 复制代码
# 先切换到test001库,再修改,省略库名
mysql> use test001;
Database changed

mysql> alter database character set utf8mb4 collate utf8mb4_0900_ai_ci;
Query OK, 1 row affected (0.01 sec)

# 验证修改结果
mysql> show create database test001;
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                 |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| test001  | CREATE DATABASE `test001` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

关键操作use 数据库名;是切换当前数据库的核心语句,执行后后续的操作若不指定库名,均针对当前数据库,简化语句书写。

6.3.3 场景 3:高级修改 ------ 设置数据库为只读状态

实操:将 java01 库设置为只读状态(1 = 只读,0 = 可读写)

sql 复制代码
mysql> alter database java01 read only=1;
Query OK, 1 row affected (0.02 sec)

核心作用 :适用于生产环境的数据备份、容灾 场景,设置为只读后,该数据库仅能执行查询操作(select),无法执行创建表、插入 / 修改 / 删除数据、删除表等写操作,避免数据被误修改。还原可读写alter database java01 read only=0;

6.3.4 场景 4:高级修改 ------ 修改数据库加密属性(8.0.16+)

实操:将 encrypt_db 库的加密属性从 Y 改为 N

sql 复制代码
mysql> alter database encrypt_db encryption='N';
Query OK, 1 row affected (0.03 sec)

注意:修改加密属性需 MySQL 服务端已配置加密插件,且数据库无正在执行的操作,否则会报错。

七、删除数据库:高危操作,谨慎执行

删除数据库是 MySQL 中最高危的操作之一 ,执行后会永久删除 该数据库对应的所有内容:包括数据库中的所有表、数据、索引、视图等,同时数据库对应的文件夹也会被删除,无回收站,无法恢复,开发中需严格控制,生产环境更是严禁随意执行。

使用之前慎之又慎,如果公司中有这样的需求,一定要把你的领导,同事叫过来,一起来干这个事!

数据库中的数据对公司来说非常重要,也是公司的核心资产,大家操作数据库的时候一定要有敬畏心。

在服务器(一般都是linux系统),上删除并没有回收站这么一说,删了就没有了,但是在磁盘上删除文件,并不是真正意义上什么都没有了。

7.1 核心语法

sql 复制代码
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

7.2 语法关键细节

  1. IF EXISTS必加的安全配置,删除前先判断数据库是否存在,存在则删除,不存在则不执行且不报错,避免删除不存在的数据库导致程序异常
  2. 权限要求 :仅拥有 MySQL超级管理员权限的用户(如 root)才能执行删除数据库操作,普通用户无此权限,这是 MySQL 的安全机制
  3. 不可逆性 :删除操作是物理删除,并非逻辑删除,数据一旦删除无法恢复,无任何挽回余地

7.3 实操示例

7.3.1 安全删除:判断存在则删除(唯一推荐写法)

实操:删除 testdb 数据库

sql 复制代码
mysql> drop database if exists testdb;
Query OK, 0 rows affected (0.04 sec)

结果解析0 rows affected表示该数据库中无表 / 数据,若数据库中有表,会显示受影响的行数,代表删除的表数量。

7.3.2 验证删除结果

删除后通过show databases;语句验证,目标数据库会从列表中消失,确认删除成功:

sql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| java01             |
| mysql              |
| performance_schema |
| sys                |
| test001            |
+--------------------+
6 rows in set (0.00 sec)

结果:testdb 已从列表中消失,删除成功。

7.4 删库操作的核心避坑原则(必看)

7.4.1 开发 / 测试环境避坑
  1. 执行删库语句前,务必再次确认数据库名,避免删错库(如将 test001 写成 test002)
  2. 重要测试数据在删库前先做备份 ,可通过mysqldump工具导出数据,防止数据丢失
  3. 尽量在非工作时间执行删库操作,避免影响团队开发
  4. MYSQL在执行的过程中只要第数据库进行修改操作,都会把这些操作内容记录到日志中,如果误删了数据库,就可以通过日志,快速的把日志中记录的所有操作再执行一遍,完成恢复。
  5. 数据库定期备份,每天备份一份(增量备份,记录的是今天比昨天新增的数据),每周备份一次,全量备份。
  6. 在公司的生产环境中,一般都是以集群形式部署的,如果只删除了其中一台机器,其他机器中的日志还是可以用的。
  7. 电力供应都是和当地的电厂直接挂钩的,机房的备电源UPS,足以支持机房运行15M-30M.机房外还有自备的发电机,机房下还有一个非常大的油库。
7.4.2 生产环境严令禁止
  1. 严禁直接执行drop database语句,生产环境的数据库若需下线,需走正规的审批流程
  2. 生产环境开启数据库备份机制(全量备份 + 增量备份),即使误删也能通过备份恢复数据
  3. 限制生产环境 MySQL 的 root 账号权限,仅少数管理员拥有,避免账号泄露导致误删库
  4. 开启 MySQL 的慢查询日志、操作日志,记录所有数据库操作,便于误操作后溯源

八、MySQL 库操作核心总结:语法 + 规范 + 避坑

8.1 四大核心操作完整语法速查表(含推荐写法)

操作类型 基础语法 开发推荐写法(安全 / 规范) 适用场景
查看数据库 show databases; show databases; 快速查询所有库
创建数据库 create database 库名; create database if not exists 库名 character set utf8mb4 collate utf8mb4_0900_ai_ci; 所有开发 / 生产场景,基础建库规范
查看创建语句 show create database 库名; show create database 库名; 验证库配置、复刻库、排查问题
修改数据库 alter database 库名 配置项; use 库名; alter database character set 字符集 collate 排序规则; 修改库的字符集 / 排序规则 / 只读属性
删除数据库 drop database 库名; drop database if exists 库名;(仅测试 / 开发环境) 测试环境清理无用库,生产环境严禁

8.2 字符集与排序规则核心规范(从根源避坑)

  1. 开发首选 :字符集用utf8mb4,排序规则用utf8mb4_0900_ai_ci,满足 99% 的业务需求,支持中文、emoji,避免乱码
  2. 版本适配:MySQL5.7 需手动将服务器 / 数据库默认字符集从 latin1 改为 utf8mb4,否则会出现中文乱码
  3. 统一配置 :创建数据库时必须手动指定字符集和排序规则,不依赖系统默认配置,保证团队开发配置一致
  4. 生效规则 :库的配置仅对后续新建表生效,已存在的表需单独修改,执行alter table 表名 character set utf8mb4 collate utf8mb4_0900_ai_ci;

8.3 库操作通用开发规范(团队协作必备)

  1. 命名规范 :数据库名使用小写字母 + 下划线,由业务名 / 模块名 + 标识组成,如 bit_mall、user_center、java01_test,避免数字开头、使用特殊符号和关键字
  2. 安全规范 :所有创建 / 删除语句必加 IF NOT EXISTS,提升语句容错性,避免程序执行报错
  3. 验证规范 :执行创建 / 修改 / 删除操作后,务必通过对应的验证语句确认结果(如 show create database、show databases)
  4. 权限规范:开发环境使用普通账号,仅分配对应数据库的操作权限,不使用 root 账号,降低误操作风险
  5. 注释规范 :创建数据库时可通过注释说明业务用途(如create database if not exists bit_mall comment '电商商城主数据库' character set utf8mb4;),提升代码可读性

九、后续学习方向

掌握数据库的核心操作后,下一步将进入 MySQL 实操的核心环节 ------ 表的操作,表是 MySQL 存储数据的最小单位,也是业务开发的核心载体。后续我们将详细讲解:

  1. 表的创建、查看、修改、删除操作
  2. MySQL 常用数据类型(数值型、字符型、日期型)的选择与使用
  3. 表的约束(主键、外键、非空、唯一、默认值)的配置与作用
  4. 表的设计规范,如何根据业务需求设计合理的表结构

这些内容是数据库设计的核心,直接决定了数据存储的合理性、安全性和查询效率,也是后续数据增删改查、高级查询的基础。


总结

以上就是今天要讲的内容,本文简单记录了数据结构学习内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!

相关推荐
BduL OWED3 小时前
Redis之Redis事务
java·数据库·redis
星星也在雾里3 小时前
Dify Agent + FastAPI + PostgreSQL实现数据库查询
数据库·人工智能·fastapi
TDengine (老段)3 小时前
以事件为核心 + 以资产为核心:工业数据中缺失的关键一环
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
r_oo_ki_e_3 小时前
快速复习mysql
数据库·mysql
huabiangaozhi3 小时前
修改表字段属性,SQL总结
java·数据库·sql
IvorySQL4 小时前
第 6 次执行后,PostgreSQL 执行计划为何突变?
数据库·postgresql·开源
小文大数据4 小时前
python实现HTML转PDF
java·前端·数据库
羊小蜜.4 小时前
Mysql 03: 连接查询全解——内连接、外连接与复合条件查询
数据库·mysql·算法·连接查询
IvorySQL4 小时前
PostgreSQL 技术日报 (4月2日)|社区工具更新与内核补丁讨论速递
数据库·postgresql·开源