📄 一句话概括
CREATE TABLE 把 2-2 的【表设计图】落成真表——列名+类型+主键一次定死;DROP TABLE 把整张表连结构带数据拆掉。
📝 本节和前面几节的关系
3-3、3-4 在【库】这一层打转;本节下到【表】这一层,也是本章贯穿示例表 students 的【出生证】。造表 = 2-2 的字段类型设计 + SQL 语法,两章知识在这里合流。
一、CREATE TABLE 的语法骨架
CREATE TABLE 表名 (
列名 类型 [约束],
列名 类型 [约束],
...
);
把本章示例表正式造出来:
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT,
class INTEGER,
score INTEGER
);
三个关键部位:
- 列名:起名见名知意(name、score),别用 a、b、c
- 类型:2-2 讲过——TEXT 文字、INTEGER 整数、REAL 小数、DATE 日期……类型是硬约束(填错插不进)
- 约束:本表用了 PRIMARY KEY(主键)——2-3 讲过:唯一标识每条记录,不许重复、不许空
二、造表是【一步定终身】的设计活
表结构一造好,每一行都必须按这个格式填:
- 想给 students 加一列【email】?——得改表结构(ALTER 命令,教材后续有讲,本课先知道改结构麻烦)
- 所以造表前想清楚:这张表放什么、每个字段什么类型、拿什么当主键
生活比喻:CREATE TABLE 是装修打柜子——格子(字段)打好后,每件东西按格子放;想加格子就是二次施工,动静大。
三、DROP TABLE:整表拆除
DROP TABLE students;
- 表结构+表里所有数据一起消失,不可恢复(3-3 的 DROP 危险三连,这里是第二级)
- DROP TABLE vs DELETE(3-12 预告):DROP 是拆柜子(柜子和东西都没),DELETE 是清东西(柜子还在)
四、动手 Demo:亲手造出本章的贯穿表
-- ① 造表
CREATE TABLE students (
id INTEGER PRIMARY KEY,
name TEXT,
class INTEGER,
score INTEGER
);
-- ② 主键不许重复:报错!
INSERT INTO students VALUES (1, '张三', 1, 85);
INSERT INTO students VALUES (1, '假张三', 2, 99); -- UNIQUE 约束失败
-- ③ 拆表后查明细:报错!没有这个表
DROP TABLE students;
SELECT * FROM students;
看到什么算成功:②报【UNIQUE constraint failed】、③报【no such table】——【主键防重复】【DROP 就真没】两条铁律亲眼验证。
五、30 秒实验
造完 students 后,把 2-2 那个刁钻输入再来一遍:
INSERT INTO students VALUES (6, '孙八', '三月份', 88); -- class 是 INTEGER,'三月份' 填得进吗?
——SQLite 出于历史原因对类型比较宽容(填得进!),但 MySQL 严格模式会拒绝。体会:类型约束的严格程度各家不同,但【按类型存】的设计意图永远一致;写代码要按严格的来,别钻宽容的空子。
六、常见误区
- "造表和插数据是一回事" —— CREATE TABLE 只搭骨架(一行数据都没有);数据要靠 INSERT(3-6)一条条进。
- "主键可以随便挑一列" —— 主键必须唯一且不空;【姓名】就可能撞车(同名同姓),用【学号】【身份证号】这种天然不重复的。
- "DROP TABLE 删完表数据还在别处" —— 没有别处。整表拆除=结构+数据全灭;想留数据先备份。
自测三问(点开对答案)
1. CREATE TABLE 要定哪三样? **列名、类型、约束**(本表用了主键约束)。 2. 主键的两条铁律? **不许重复、不许为空**——它负责唯一标识每条记录。 3. DROP TABLE 和 DELETE 的比喻区别? **拆柜子 vs 清东西**:柜子(表结构)在不在是分水岭。- ☐ 下一节(3-6 INSERT INTO-添加记录)
相关笔记
- CREATE DATABASE、DROP DATABASE-创建和删除数据库 —— 上一节:DROP 的危险脾气,本节同款
- 表、列、记录、字段-以表格形式存储数据 —— 表设计图来自那一节
- 🗄️ 数据库基础 · 索引 —— 全课路线图