# P06 06. 基础-SQL-DDL-数据库操作

> 本页是学习笔记，不等同于视频逐字稿。原声字幕未取得（匿名接口字幕轨为空且需登录，未使用任何账号），也没有逐句讲解记录；讲义只按节与页码对应，切点未逐句确证。

> 以同版讲义的公开镜像核对章节与页码（镜像非官方出品）；非逐字稿，示例为原创补充。

## P06 06. 基础-SQL-DDL-数据库操作

- 原视频：https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=6（p=6），时长 10:36
- 讲义：2.3.1 数据库操作 p15–17（公开镜像；按主题对应，切点 notexact）

- 本集练习数据：practice/p06.sql（先执行，再对照小例）

### 一句话理解

这一集只动“库”这一层：查看有哪些库、建库、切库、删库，为后面建表准备一个干净的容器。

### 步骤

1. 查询用 `SHOW DATABASES;` 看全部库，`SELECT DATABASE();` 看当前在哪个库。没选库时后者返回 NULL。
2. 建库用 `CREATE DATABASE 库名`，可加 `IF NOT EXISTS` 避免重复建报错，`DEFAULT CHARSET utf8mb4` 指定字符集，中文才不乱码。
3. 用 `USE 库名;` 切换，之后的建表、插数据都落在当前库里。切错库是新手最常见的“表建到别处去了”。
4. 删库是 `DROP DATABASE [IF EXISTS] 库名`。画面里重复执行 `create database itcast` 时报 database exists，说明不加 IF NOT EXISTS 就会中断脚本。

### SQL 示例

```
CREATE DATABASE IF NOT EXISTS demo_p06 DEFAULT CHARACTER SET utf8mb4;
SHOW DATABASES LIKE 'demo_p06';
```

说明：第一句建一个只用于练习的库，已存在也不报错；第二句只筛出名字叫 `demo_p06` 的库。结果一列（列名会带库名后缀）、一行 `demo_p06`，看到这一行就证明建成功了。只在练习环境执行，别对真实业务库动手。

### 易错点

- 不加 IF NOT EXISTS 反复跑建库脚本，第二次就报错，后面的语句可能全被跳过。
- 建库不指定字符集，默认字符集不合适时中文会变问号。练习统一 `utf8mb4`。
- 以为 DROP DATABASE 只删表。它删的是整个库，里面的表和数据一起没。

### 30 秒速记

SHOW DATABASES 看全部；SELECT DATABASE() 看当前；CREATE DATABASE ... utf8mb4；USE 切库；DROP DATABASE 删整库。

### 自测

1. `USE` 这条命令改变了什么？
   - 答：它只改变当前连接默认使用的库，不复制、不移动数据。之后的建表、查询都默认落在这个库里，直到你再 USE 另一个库。
2. 为什么建库时建议写 `DEFAULT CHARSET utf8mb4`？
   - 答：字符集决定中文、emoji 能不能存。默认字符集随版本和安装配置变化，显式写 utf8mb4 可以避免“中文变问号”这类环境差异。

### 材料与来源

- [平台视频页] B站原视频 P06《06. 基础-SQL-DDL-数据库操作》 https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=6
- [平台视频页] 本集采样画面 p06_t20.jpg（约 127s） https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=6
- [平台视频页] 本集采样画面 p06_t40.jpg（约 254s） https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=6
- [官方文档] MySQL 8.0 Reference Manual: CREATE DATABASE https://dev.mysql.com/doc/refman/8.0/en/create-database.html

证据说明：以同版讲义公开镜像核对：讲义 2.3.1 数据库操作（p15–17）。原声字幕未取得（匿名接口字幕轨为空且需登录），讲师逐句讲解未核；本页示例、表与数字为站内原创，不是课堂原表。
