内容正文:
举一反三考点练
《数据库原理与应用技术-MySQL》MySQL数据表管理-讲义
1. 掌握修改数据表结构(ALTER TABLE)
2. 熟悉重命名与复制数据表
3. 掌握删除数据表(DROP TABLE)
知识点一 修改数据表结构(ALTER TABLE)
1.命令总览
(1)核心语句:ALTER TABLE 表名 操作子句;
(2)常用操作子句:ADD / MODIFY / CHANGE / DROP / RENAME / ENGINE / CHARSET / COLLATE / AUTO_INCREMENT=N。
2.ADD——新增字段
(1)默认追加到末尾:ALTER TABLE student ADD test int(4);
(2)指定位置:AFTER 列名 或 FIRST,如 ADD birthday DATE AFTER stusex;
3.MODIFY——改类型/位置/空值/默认值
(1)仅改定义不改名:ALTER TABLE student MODIFY stuname VARCHAR(30) NOT NULL;
(2)可同时调整顺序:MODIFY stuname VARCHAR(30) AFTER stuid;
4.CHANGE——改名+改类型
必须写旧名、新名、新类型:ALTER TABLE student CHANGE stuname sname VARCHAR(40);
5.DROP——删除字段
直接移除:ALTER TABLE student DROP photo; 数据同时消失,谨慎操作。
6.RENAME——表重命名
(1)单表:ALTER TABLE student RENAME TO studentbak;
(2)多表一次性迁移:RENAME TABLE student TO s1, score TO s2;
7.引擎/字符集/自增初值
(1)ALTER TABLE student ENGINE=MyISAM;
(2)ALTER TABLE student CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
(3)ALTER TABLE student AUTO_INCREMENT=1001; 下条记录从 1001 开始。
8.综合示例
9.注意事项
(1)大表 MODIFY/CHANGE 会锁表,线上环境需用 pt-online-schema-change;
(2)先备份再删除;新字段若 NOT NULL 必须提供 DEFAULT 值或与 ADD 同时指定。
(多项选择题)下列关于 ALTER TABLE 语句的说法正确的有( )
A. 可在同一条语句中连续使用多个 ADD 子句 B. MODIFY 既能改数据类型也能调整列顺序
C. CHANGE 必须同时给出旧列名和新列名 D. DROP 子句可以一次删除多列
【答案】ABC
【解析】MODIFY 不改列名但可调顺序;CHANGE 必须写两次列名;ADD 可多条;DROP 需多次写 DROP 才能删多列,一次只能一列。
【要点】ALTER 各子句语法特点。
1.(单项选择题)若只想把列 birth 的数据类型从 DATE 改为 DATETIME 而不改列名,应使用的子句是( )
A. CHANGE birth DATETIME B. MODIFY birth DATETIME
C. ALTER birth DATETIME D. UPDATE birth SET TYPE=DATETIME
【答案】B
【解析】MODIFY 不改列名仅改定义;CHANGE 必须写新旧两个列名。
【要点】MODIFY vs CHANGE 区别。
2.(单项选择题)在 ALTER TABLE 语句中,把新列添加到表的最前面应使用的关键字是( )
A. AFTER B. FIRST C. BEFORE D. BEGIN
【答案】B
【解析】FIRST 表示列首;AFTER 需指定参考列。
【要点】列位置控制关键字。
3.(多项选择题)以下操作会导致整张表被锁定的有( )
A. 大表 MODIFY 修改数据类型 B. 添加新字段并指定 AFTER
C. DROP 删除某列 D. RENAME 重命名表
【答案】AC
【解析】MODIFY 需重建表,锁表时间长;DROP 列也需重建;ADD、RENAME 仅元数据变更,时间短。
【要点】锁表风险识别。
1.(填空题)把表 tb_score 改名为 tb_grade,应执行语句 ______ 表名 tb_score TO tb_grade;
【答案】RENAME TABLE
【解析】RENAME TABLE old TO new 可瞬间完成重命名。
【要点】重命名语法。
2.(填空题)若要在 ALTER TABLE 语句中把自增主键的起始值改为 3000,应写的子句是 ______=3000;
【答案】AUTO_INCREMENT
【解析】ALTER TABLE … AUTO_INCREMENT=n 可重设自增起点。
【要点】自增起点设置。
3.(判断题)使用 MODIFY 子句时可以同时把列名一起改掉( )
【答案】×
【解析】MODIFY 只能改类型、顺序、约束,不改列名;改名必须用 CHANGE。
【要点】MODIFY 与 CHANGE 功能边界。
· ADD 新列:ADD 列 类型 AFTER 列
· MODIFY:改类型/顺序/非空,不改名
· CHANGE:改名+改类型
· DROP:删列,DROP 列
· RENAME/ENGINE/CHARSET:RENAME TO 新表 或 ENGINE=InnoDB 等
· 大表操作先备份,线上用工具避免锁表
知识点二 重命名与复制数据表
1.RENAME TABLE(轻量级迁移)
(1)语法:RENAME TABLE old TO new [, old2 TO new2] ...;
(2)跨库重命名:RENAME TABLE db1.t1 TO db2.t1; 权限需对两库同时拥有。
(3)原子操作:会话级锁,瞬间完成,依赖文件系统移动。
2.CREATE TABLE ... LIKE(结构克隆)
(1)仅复制定义、索引、默认值,不复制数据:
CREATE TABLE studentnew LIKE student;
(2)再插数据:INSERT INTO student VALUES();
3.CREATE TABLE ... SELECT(结构+数据一次性)
(1)CREATE TABLE studentcopy AS SELECT * FROM student;
(2)可带 WHERE 条件、列运算、JOIN,但会丢失索引、外键、默认值,需要后续手动补充。
4.Navicat 图形化复制
(1)右键表 →“复制表”→ 选“仅结构”或“结构+数据”→ 输入新名称 → 完成;
(2)自动补索引、主键、自增属性,省去手写 DDL。
5.典型场景
(1)快速建测试环境:LIKE 空结构,再导入少量数据;
(2)灰度升级:RENAME 切换新旧表,实现零停机发布;
(3)备份快照:CREATE TABLE...SELECT 当日数据,供回滚。
6.风险提醒
(1)LIKE 不会复制外键定义,需手动 ALTER 添加;
(2)大表 SELECT 复制会产生大量 redo/undo,建议分批或夜间执行。
(多项选择题)关于 `RENAME TABLE` 语句,下列说法正确的有( )
A. 可以一次性重命名多张表 B. 支持跨数据库重命名
C. 执行期间会锁定表 D. 可以回滚操作
【答案】ABC
【解析】`RENAME TABLE` 是原子操作,可一次改多个表名,也支持跨库迁移,但不可回滚。
【要点】`RENAME TABLE` 的特性与限制。
1.(单项选择题)若只复制表结构及其索引,不复制数据,应使用的命令是( )
A. `CREATE TABLE t2 SELECT * FROM t1` B. `CREATE TABLE t2 LIKE t1`
C. `RENAME TABLE t1 TO t2` D. `ALTER TABLE t1 ENGINE=InnoDB`
【答案】B
【解析】`LIKE` 仅复制定义、索引、默认值,不复制数据。
【要点】结构克隆语句。
2.(单项选择题)使用 `CREATE TABLE...AS SELECT` 复制表时,下列哪一项不会被自动复制( )
A. 数据行 B. 列运算结果 C. 索引 D. WHERE 条件过滤后的结果
【答案】C
【解析】`AS SELECT` 只生成新表并插入结果集,不会复制原表索引、外键等对象。
【要点】带数据复制的局限性。
3.(多项选择题)在 Navicat 中复制表时,可选的复制方式有( )
A. 仅结构 B. 结构+数据 C. 仅数据 D. 仅外键
【答案】AB
【解析】Navicat 提供“仅结构”与“结构+数据”两种快捷选项,不支持单独复制外键。
【要点】图形化复制表的可选项。
1.(填空题)若要将当前库中的表 `old` 立即改名为 `new`,应输入语句 ______。
【答案】`RENAME TABLE old TO new;`
【解析】`RENAME TABLE` 可瞬间完成重命名,属于 DDL 原子操作。
【要点】重命名基本语法。
2.(填空题)使用 `CREATE TABLE t_copy ______ t_original` 可复制原表结构及索引,但不复制数据。
【答案】`LIKE`
【解析】`LIKE` 子句仅复制定义与索引,不复制数据行。
【要点】`LIKE` 与 `AS SELECT` 的区别。
3.(判断题)`RENAME TABLE` 可以在一条语句中同时把表从一个数据库移到另一个数据库。( )
【答案】√
【解析】语法允许 `RENAME TABLE db1.t TO db2.t;`,只要对两库均有权限即可。
【要点】跨库重命名写法。
· RENAME TABLE old TO new 瞬间完成,可跨库
· CREATE TABLE t2 LIKE t1 仅复制结构索引
· CREATE TABLE t2 AS SELECT * FROM t1 带数据,无索引
· Navicat:右键→复制表→选“结构”或“结构+数据”
· 注意外键、索引需补全,大表复制错峰执行
知识点三 删除数据表(DROP TABLE)
1.语法与选项
(1)DROP [TEMPORARY] TABLE [IF EXISTS] 表1 [,表2] ...;
(2)IF EXISTS 避免“Unknown table”错误;TEMPORARY 只删当前会话临时表。
2.级联限制
(1)存在外键约束时,需先 SET FOREIGN_KEY_CHECKS=0; 或先删子表;
(2)与视图、存储过程、触发器无自动级联,需手动清理依赖。
3.数据与文件回收
(1)InnoDB 开启 innodb_file_per_table=1 时,.ibd 文件同步删除,磁盘立即释放;
(2)MyISAM 删除 .MYD、.MYI、.frm 文件;
(3)未开启单表空间则仅标记空间空闲,需后续 OPTIMIZE 或重建库才能归还 OS。
4.权限要求
需要对该表的 DROP 权限,以及库级的 REFERENCES 权限(外键场景)。
5.Navicat 图形删除
(1)右键表 →“删除表”→ 弹出确认框 → 确定;
(2)支持多选批量删除,自动禁用外键检查,操作完成有日志提示。
6.安全建议
(1)线上环境先 RENAME TABLE 改名观察 24h,确认无访问再 DROP;
(2)定期全备 + 延迟从库,防止误删;
(3)开启 sql_safe_updates & 回收 SUPER 权限,避免命令行手抖。
7.恢复方案
(1)利用全备+binlog 点位恢复;
(2)延迟从库快速闪回;
(3)第三方工具(如 binlog2sql)生成反向 SQL 补回数据。
(多项选择题)以下关于 DROP TABLE 语句的描述,正确的有( )
A. 会同时删除表结构与数据 B. 会级联删除相关联的视图
C. 执行后可通过 ROLLBACK 回滚 D. 带 IF EXISTS 可避免表不存在时报错
【答案】AD
【解析】DROP TABLE 立即物理删除表文件,不可回滚;视图、触发器不会自动级联删除;IF EXISTS 可抑制错误。
【要点】DROP 的不可回滚性与级联限制。
1.(单项选择题)在 Navicat 中删除数据表时,系统会( )
A. 直接删除,不提示 B. 弹出确认框,确认后删除
C. 自动生成备份再删除 D. 需要输入管理员密码
【答案】B
【解析】Navicat 默认弹出“确认删除”对话框,防止误操作。
【要点】图形化安全确认机制。
2.(单项选择题)若表存在外键约束,直接执行 DROP TABLE 将( )
A. 自动先删除子表 B. 报错并终止
C. 强制删除并删除子表数据 D. 自动设置外键检查为 0 后删除
【答案】B
【解析】存在外键依赖时,MySQL 拒绝删除,需先解除依赖或 SET FOREIGN_KEY_CHECKS=0。
【要点】外键保护机制。
3.(多项选择题)以下属于安全删除线上表的可行措施有( )
A. 先 RENAME 观察 24 小时 B. 全库备份后再 DROP
C. 直接加 IF EXISTS 删除 D. 利用延迟从库快速闪回
【答案】ABD
【解析】IF EXISTS 仅抑制报错,不具备安全观察作用;其余均为推荐防护手段。
【要点】线上安全第一,备份+观察+闪回。
1.(填空题)在 MySQL 中,若要在删除表时避免“Unknown table”错误,应在 DROP TABLE 后加关键字__________。
【答案】IF EXISTS
【解析】IF EXISTS 可在表不存在时静默跳过,不中断脚本。
【要点】脚本健壮性保障。
2.(填空题)开启 innodb_file_per_table=1 后,当执行 DROP TABLE 时,对应的__________文件会被操作系统立即回收。
【答案】.ibd
【解析】单表空间模式下,每张 InnoDB 表独立 .ibd 文件,删除即释放。
【要点】文件级磁盘回收。
3.(判断题)使用 DROP TABLE 删除临时表时,必须加上 TEMPORARY 关键字,否则会报错( )
【答案】×
【解析】TEMPORARY 可省略;不带关键字也能删除临时表,但加关键字更安全,避免误删永久表。
【要点】TEMPORARY 为可选修饰。
· 语法:DROP TABLE [IF EXISTS] 表1,表2;
· 会同时删文件与数据,不可回滚
· 有外键先删子表或 SET FOREIGN_KEY_CHECKS=0
· Navicat:右键→删除表→确认
· 线上先 RENAME 观察,再 DROP;定期备份+延迟从库防误删
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$