第06周 数据表的基本操作(创建、修改、删除)
第6周 · 数据表的基本操作(创建、修改、删除)
库建好了,这周学"建表、改表、删表"。表结构一旦要改,最怕丢数据,所以记住一句话:改结构前先备份。
一、知识点:表结构三要素
设计一张表,要定好每一列的:
- 列名:字段叫什么(如
sid)。 - 数据类型:存什么类型(如
INT、VARCHAR(20))。 - 约束:限制条件(如主键、非空、唯一,下周细讲,这周先认识主键)。
二、操作教程:创建数据表(CREATE TABLE)
USE school;
CREATE TABLE student (
sid INT PRIMARY KEY, -- 学号,设为主键
sname VARCHAR(20),
sage INT,
enroll DATE
);
查看结构:
DESC student; -- 或 SHOW COLUMNS FROM student;
SHOW CREATE TABLE student; -- 看建表完整语句
三、知识点:主键 PRIMARY KEY
主键:能唯一标识一行的字段,如学号sid。- 特点:不能重复、不能为空(NULL)。
- 一张表只能有一个主键(可以是多个字段组合的"复合主键")。
- 作用:快速定位某一行、保证数据不重复。
-- 建表时直接设主键
CREATE TABLE course (
cid INT PRIMARY KEY,
cname VARCHAR(40)
);
-- 已有表补设主键
ALTER TABLE course ADD PRIMARY KEY (cid);
四、操作教程:ALTER TABLE 增加列(ADD)
-- 给 course 表加一列 teacher(授课教师)
ALTER TABLE course ADD teacher VARCHAR(20);
新列默认加在表末尾。若要指定位置,可加 AFTER 列名 或 FIRST:
ALTER TABLE course ADD teacher VARCHAR(20) AFTER cname;
五、操作教程:ALTER TABLE 修改列类型(MODIFY)
-- 把 credit 从 INT 改成 DECIMAL(3,1)(保留1位小数)
ALTER TABLE course MODIFY credit DECIMAL(3,1);
MODIFY只改类型/位置,不改列名。缩短类型(如 VARCHAR(40)→VARCHAR(10))可能截断数据,谨慎。
六、操作教程:ALTER TABLE 修改列名(CHANGE)
-- 把 teacher 改名为 instructor,类型保持 VARCHAR(20)
ALTER TABLE course CHANGE teacher instructor VARCHAR(20);
CHANGE必须同时写新列名和类型(即使类型不变也要重写一遍)。这是它和MODIFY的最大区别。
七、操作教程:删除列(DROP COLUMN)
ALTER TABLE course DROP COLUMN teacher;
删列会永久丢失该列所有数据,执行前务必确认已备份。
八、操作教程:重命名表(RENAME TABLE)
RENAME TABLE course TO course_info;
-- 等价写法:
ALTER TABLE course_info RENAME TO course;
九、操作教程:删除表 / 清空表
DROP TABLE course; -- 连表结构带数据一起删,表没了
TRUNCATE TABLE course; -- 只清空数据,保留表结构
| 对比 | DROP TABLE | TRUNCATE TABLE |
|---|---|---|
| 表结构 | 删除 | 保留 |
| 数据 | 删除 | 清空 |
| 能否回滚 | 不可 | 不可(效率高,等价"重置") |
| 适用 | 不再要这张表 | 保留表、清空数据重来 |
想保留结构只清数据,用
TRUNCATE;想彻底不要表,用DROP。两者都不可恢复,先备份。
十、综合实操:建 course 并改结构
USE school;
-- 1. 建表
CREATE TABLE course (
cid INT,
cname VARCHAR(40),
credit INT
);
-- 2. 增加 teacher 列
ALTER TABLE course ADD teacher VARCHAR(20);
-- 3. 把 credit 改为 DECIMAL(3,1)
ALTER TABLE course MODIFY credit DECIMAL(3,1);
-- 4. 把 teacher 改名为 instructor
ALTER TABLE course CHANGE teacher instructor VARCHAR(20);
-- 5. 表改名
RENAME TABLE course TO course_info;
十一、易混点排查表
| 现象 | 解决方法 |
|---|---|
| 改列名报错 | CHANGE 必须写新名+类型;只想改类型用 MODIFY |
| 缩短类型后数据变空/截断 | 改前备份;先确认数据长度再改 |
DROP COLUMN 误删列 |
改结构前先 CREATE TABLE 备份 AS SELECT * 备份 |
| 分不清 DROP / TRUNCATE | DROP 删表结构,TRUNCATE 只清数据 |
| 主键设不上 | 主键列不能有重复值或 NULL,先清理脏数据 |
No database selected |
操作前先 USE 库名 |
十二、小测验(自测)
MODIFY和CHANGE在改列时有什么区别?把credit改成DECIMAL(3,1)该用哪个?- 把列
teacher改名为instructor(保持 VARCHAR(20))的 SQL 是什么? DROP TABLE和TRUNCATE TABLE的区别?想"清空数据但保留表"用哪个?- 为什么主键列不能出现重复值和 NULL?
【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。
浙公网安备 33010602011771号