以下是基于您提供的 ALTER 语法设计的 10 道适合初学者的练习题:
基础表结构
假设我们有一个初始的学生表:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT
);
题目 1:添加新列
要求:在 students
表的最后添加一个 email
列,数据类型为 VARCHAR(100)
-- 参考答案
ALTER TABLE students ADD COLUMN email VARCHAR(100);
题目 2:添加列到指定位置
要求:在 name
列后面添加 gender
列,数据类型为 ENUM('M','F')
-- 参考答案
ALTER TABLE students ADD COLUMN gender ENUM('M','F') AFTER name;
题目 3:添加列到第一位置
要求:在表的第一列添加 student_code
列,数据类型为 VARCHAR(20),不能为空
-- 参考答案
ALTER TABLE students ADD COLUMN student_code VARCHAR(20) NOT NULL FIRST;
题目 4:添加带默认值的列
要求:在表末尾添加 created_at
列,数据类型为 TIMESTAMP,默认值为当前时间
-- 参考答案
ALTER TABLE students ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
题目 5:删除列
要求:删除 age
列
-- 参考答案
ALTER TABLE students DROP COLUMN age;
题目 6:修改列数据类型
要求:将 name
列的数据类型从 VARCHAR(50) 修改为 VARCHAR(100)
-- 参考答案
ALTER TABLE students MODIFY COLUMN name VARCHAR(100) NOT NULL;
题目 7:修改列位置
要求:将 email
列移动到 gender
列后面
-- 参考答案
ALTER TABLE students MODIFY COLUMN email VARCHAR(100) AFTER gender;
题目 8:添加多个列
要求:一次性添加 phone
和 address
两列
-- 参考答案
ALTER TABLE students
ADD COLUMN phone VARCHAR(15),
ADD COLUMN address TEXT;
题目 9:复杂修改操作
要求:先删除 phone
列,然后在 student_code
后面添加 birth_date
列(DATE类型)
-- 参考答案
ALTER TABLE students
DROP COLUMN phone,
ADD COLUMN birth_date DATE AFTER student_code;
题目 10:综合练习
要求:
将
address
列移动到表的第一列修改
gender
列,添加默认值 'M'在最后添加
updated_at
列(TIMESTAMP类型)
-- 参考答案
ALTER TABLE students
MODIFY COLUMN address TEXT FIRST,
MODIFY COLUMN gender ENUM('M','F') DEFAULT 'M',
ADD COLUMN updated_at TIMESTAMP;
扩展练习表结构
为了更好地练习,我们再创建一个课程表:
CREATE TABLE courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(100) NOT NULL,
credit INT,
teacher VARCHAR(50)
);
附加题 11-15:
题目 11:在 courses
表中,在 credit
列后面添加 department
列(VARCHAR(50))
ALTER TABLE courses ADD COLUMN department VARCHAR(50) AFTER credit;
题目 12:修改 teacher
列的数据类型为 VARCHAR(100)
ALTER TABLE courses MODIFY COLUMN teacher VARCHAR(100);
题目 13:删除 department
列
ALTER TABLE courses DROP COLUMN department;
题目 14:在表的第一列添加 course_code
列(VARCHAR(20),UNIQUE约束)
ALTER TABLE courses ADD COLUMN course_code VARCHAR(20) UNIQUE FIRST;
题目 15:将 credit
列移动到 course_name
列后面
ALTER TABLE courses MODIFY COLUMN credit INT AFTER course_name;
练习建议
按顺序完成:题目难度逐渐增加
验证结果:每个 ALTER 语句执行后,使用
DESC 表名;
查看表结构变化错误处理:注意数据类型兼容性和约束条件
备份数据:在生产环境中,执行 ALTER 前建议备份数据