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

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
);

三个关键部位:

  1. 列名:起名见名知意(name、score),别用 a、b、c
  2. 类型:2-2 讲过——TEXT 文字、INTEGER 整数、REAL 小数、DATE 日期……类型是硬约束(填错插不进)
  3. 约束:本表用了 PRIMARY KEY(主键)——2-3 讲过:唯一标识每条记录,不许重复、不许空

二、造表是【一步定终身】的设计活

表结构一造好,每一行都必须按这个格式填:

生活比喻:CREATE TABLE 是装修打柜子——格子(字段)打好后,每件东西按格子放;想加格子就是二次施工,动静大。

三、DROP TABLE:整表拆除

DROP TABLE students;

四、动手 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 严格模式会拒绝。体会:类型约束的严格程度各家不同,但【按类型存】的设计意图永远一致;写代码要按严格的来,别钻宽容的空子。

六、常见误区

  1. "造表和插数据是一回事" —— CREATE TABLE 只搭骨架(一行数据都没有);数据要靠 INSERT(3-6)一条条进。
  2. "主键可以随便挑一列" —— 主键必须唯一且不空;【姓名】就可能撞车(同名同姓),用【学号】【身份证号】这种天然不重复的。
  3. "DROP TABLE 删完表数据还在别处" —— 没有别处。整表拆除=结构+数据全灭;想留数据先备份。
自测三问(点开对答案) 1. CREATE TABLE 要定哪三样? **列名、类型、约束**(本表用了主键约束)。 2. 主键的两条铁律? **不许重复、不许为空**——它负责唯一标识每条记录。 3. DROP TABLE 和 DELETE 的比喻区别? **拆柜子 vs 清东西**:柜子(表结构)在不在是分水岭。

相关笔记