计算机应用

导航

第06周 数据表的基本操作(创建、修改、删除)

第6周 · 数据表的基本操作(创建、修改、删除)

库建好了,这周学"建表、改表、删表"。表结构一旦要改,最怕丢数据,所以记住一句话:改结构前先备份


一、知识点:表结构三要素

设计一张表,要定好每一列的:

  1. 列名:字段叫什么(如 sid)。
  2. 数据类型:存什么类型(如 INTVARCHAR(20))。
  3. 约束:限制条件(如主键、非空、唯一,下周细讲,这周先认识主键)。

二、操作教程:创建数据表(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 库名

十二、小测验(自测)

  1. MODIFYCHANGE 在改列时有什么区别?把 credit 改成 DECIMAL(3,1) 该用哪个?
  2. 把列 teacher 改名为 instructor(保持 VARCHAR(20))的 SQL 是什么?
  3. DROP TABLETRUNCATE TABLE 的区别?想"清空数据但保留表"用哪个?
  4. 为什么主键列不能出现重复值和 NULL?

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(10)  评论(0)    收藏  举报