📄 一句话概括
CREATE DATABASE 造一个库(装表的容器),DROP DATABASE 拆一个库——后者连库带表全没了且不可恢复,全 SQL 最危险的命令之一。
📝 本节和前面几节的关系
3-2 讲完书写规矩,开始按家族学命令:第一站【定义家族】。造东西要由外向内——先造库(本节),再造表(3-5)。
一、库是什么角色
2-2 说关系型数据库的家当是一张张表;库(database)就是这些表的容器——一个系统往往建多个库(用户库、订单库各一个,呼应 1-8 误区第一条)。
DBMS(管理员系统)
└── 数据库 school ← 本节要造的东西
├── students 表
└── classes 表
二、两条命令
-- 造库
CREATE DATABASE school;
-- 拆库
DROP DATABASE school;
语法本身简单到只有两三个词,重点在规矩与风险:
- 造:同名库已存在会报错(不许重名)
- 拆:库里的所有表、所有数据一起消失,没有回收站——SQL 没有【撤销】键
三、⚠️ DROP 是全 SQL 最危险的词
| 命令 | 拆什么 | 数据去向 |
|---|---|---|
| DROP DATABASE | 整个库+所有表+所有数据 | 永久消失 |
| DROP TABLE(3-5) | 一张表+它的数据 | 永久消失 |
| DELETE(3-12) | 表还在,删符合条件的行 | 可控、留表结构 |
职业习惯:写 DROP 之前,把整条语句读三遍,确认库名表名没有写错——把 DROP DATABASE school 打成生产环境的别的库名,是真实发生过的重大事故。
四、SQLite 的特殊约定
本课用的在线 SQLite 运行器不支持这两条命令,原因在它的设计:SQLite 的【数据库】就是一个文件(如 school.db),【造库】=新建文件、【拆库】=删文件——文件系统干的事,轮不到 SQL。
- MySQL / PostgreSQL / SQL Server:库是 DBMS 里的逻辑容器,用这两条命令
- SQLite:一个文件一个库,没有这一层命令
所以本节 Demo 用【文字演练】;从 3-5 造表开始的命令,SQLite 全部支持。
五、动手 Demo:文字演练+一条真的能跑的
在线 SQLite 里跑不了 CREATE DATABASE,但【造了会重名报错】【删了就没了】这两个行为可以用表先体会(表和库在这两点上脾气一致):
-- 准备块(能跑)
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT,
class INTEGER,
score INTEGER
);
-- ① 再造一次同名表:报错!表已存在
CREATE TABLE students (id INTEGER);
-- ② 拆掉:成功,无输出
DROP TABLE students;
-- ③ 拆完再查:报错!没有这个表了
SELECT * FROM students;
看到什么算成功:①报【已存在】、②静默成功、③报【不存在】——【造要唯一、拆就真没】这两个脾气亲手摸到了。
六、30 秒实验
想一句人生格言式的推演:如果 DROP DATABASE 有撤销键会怎样?——误删可撤销听起来美好,但【删了又恢复】会让【数据到底删没删】变成糊涂账;工程上宁可配备份(恢复到昨晚)也不用【撤销】,因为备份是有计划的行为。
七、常见误区
- "CREATE DATABASE 在所有数据库里都能跑" —— SQLite 没有;它是 MySQL 系的命令。本课的 SQLite 差异都在各节标注。
- "DROP 删的数据能找回来" —— 不能。能找回的只有备份;没有备份就是真没了。
- "一个系统一个库就够" —— 大系统常常多库分家(业务隔离、权限隔离),1-8 的误区第三条呼应。
自测三问(点开对答案)
1. 库在 DBMS 里是什么角色? **表的容器**——先有库,库里再造表。 2. DROP DATABASE 和 DROP TABLE、DELETE 的拆除范围? **整个库全毁(表+数据)/一张表全毁/只删行、表还在**。 3. SQLite 为什么不用这两条命令? **它的库就是一个文件**——造库删库是文件系统的活。- ☐ 下一节(3-4 SHOW DATABASES、USE-显示与选择数据库)
相关笔记
- SQL语言的语句-操作数据命令的基本语法 —— 上一节:本节的命令同样按那些书写规矩写
- 🗄️ 数据库基础 · 索引 —— 全课路线图