🗄️ 第三章 操作数据库-SQL的使用方法
📄 一句话概括

CREATE DATABASE 造一个库(装表的容器),DROP DATABASE 拆一个库——后者连库带表全没了且不可恢复,全 SQL 最危险的命令之一。

📝 本节和前面几节的关系

3-2 讲完书写规矩,开始按家族学命令:第一站【定义家族】。造东西要由外向内——先造库(本节),再造表(3-5)。

一、库是什么角色

2-2 说关系型数据库的家当是一张张表;库(database)就是这些表的容器——一个系统往往建多个库(用户库、订单库各一个,呼应 1-8 误区第一条)。

DBMS(管理员系统)
 └── 数据库 school        ← 本节要造的东西
      ├── students 表
      └── classes 表

二、两条命令

-- 造库
CREATE DATABASE school;

-- 拆库
DROP DATABASE school;

语法本身简单到只有两三个词,重点在规矩与风险:

三、⚠️ DROP 是全 SQL 最危险的词

命令 拆什么 数据去向
DROP DATABASE 整个库+所有表+所有数据 永久消失
DROP TABLE(3-5) 一张表+它的数据 永久消失
DELETE(3-12) 表还在,删符合条件的行 可控、留表结构

职业习惯:写 DROP 之前,把整条语句读三遍,确认库名表名没有写错——把 DROP DATABASE school 打成生产环境的别的库名,是真实发生过的重大事故。

四、SQLite 的特殊约定

本课用的在线 SQLite 运行器不支持这两条命令,原因在它的设计:SQLite 的【数据库】就是一个文件(如 school.db),【造库】=新建文件、【拆库】=删文件——文件系统干的事,轮不到 SQL。

所以本节 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 有撤销键会怎样?——误删可撤销听起来美好,但【删了又恢复】会让【数据到底删没删】变成糊涂账;工程上宁可配备份(恢复到昨晚)也不用【撤销】,因为备份是有计划的行为。

七、常见误区

  1. "CREATE DATABASE 在所有数据库里都能跑" —— SQLite 没有;它是 MySQL 系的命令。本课的 SQLite 差异都在各节标注。
  2. "DROP 删的数据能找回来" —— 不能。能找回的只有备份;没有备份就是真没了。
  3. "一个系统一个库就够" —— 大系统常常多库分家(业务隔离、权限隔离),1-8 的误区第三条呼应。
自测三问(点开对答案) 1. 库在 DBMS 里是什么角色? **表的容器**——先有库,库里再造表。 2. DROP DATABASE 和 DROP TABLE、DELETE 的拆除范围? **整个库全毁(表+数据)/一张表全毁/只删行、表还在**。 3. SQLite 为什么不用这两条命令? **它的库就是一个文件**——造库删库是文件系统的活。

相关笔记