第四章作为MySQL学习的关键一环,涵盖了诸多基础而实用的操作,这些操作不仅能够帮助我们巩固理论知识,还能在实际应用中游刃有余
本文旨在通过详细解析第四章的实际操作习题,带领大家深入理解MySQL的精髓,确保每位学习者都能扎实掌握这一章节的核心内容
一、数据库与表的创建:奠定坚实基石 习题1:创建一个名为SchoolDB的数据库,并在其中创建一个学生信息表`Students`,包含学号(ID,主键,自增)、姓名(Name,非空)、年龄(Age,默认值为18)、性别(Gender,允许为空)和入学日期(EnrollmentDate)字段
解析与操作: 1.创建数据库: sql CREATE DATABASE SchoolDB; USE SchoolDB; 2.创建Students表: sql CREATE TABLE Students( ID INT AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT DEFAULT18, Gender CHAR(1), EnrollmentDate DATE ); 说明: -`ID INT AUTO_INCREMENT PRIMARY KEY`定义了学号为主键且自动递增
-`Name VARCHAR(100) NOT NULL`确保姓名字段非空,且最大长度为100字符
-`Age INT DEFAULT18`设置年龄字段默认值为18
-`Gender CHAR(1)`允许性别字段为空,通常使用M或F表示
-`EnrollmentDate DATE`用于存储入学日期
习题2:向Students表中添加一个新字段`Class`(班级),类型为VARCHAR(50)
解析与操作: sql ALTER TABLE Students ADD COLUMN Class VARCHAR(50); 说明:使用ALTER TABLE语句可以轻松地向现有表中添加新字段
二、数据插入与更新:实战演练 习题3:向Students表中插入以下记录: - 学号:自动生成,姓名:张三,年龄:20,性别:男,入学日期:2023-09-01,班级:计算机1班
- 学号:自动生成,姓名:李四,年龄:19,性别:女,入学日期:2023-09-02,班级:计算机1班
解析与操作: sql INSERT INTO Students(Name, Age, Gender, EnrollmentDate, Class) VALUES (张三,20, M, 2023-09-01, 计算机1班), (李四,19, F, 2023-09-02, 计算机1班); 习题4:将李四的年龄修改为20岁,并将性别更正为‘女’(如果之前未正确输入)
解析与操作: sql UPDATE Students SET Age =20, Gender = F WHERE Name = 李四; 说明:UPDATE语句用于修改表中现有记录,通过`WHERE`子句指定修改条件
三、数据查询:挖掘信息的艺术 习题5:查询所有学生的信息
解析与操作: sql SELECTFROM Students; 习题6:查询年龄大于18岁的学生姓名和班级
解析与操作: sql SELECT Name, Class FROM Students WHERE Age >18; 习题7:查询计算机1班所有学生的详细信息,并按学号降序排列
解析与操作: sql SELECT - FROM Students WHERE Class = 计算机1班 ORDER BY ID DESC; 说明:ORDER BY子句用于对查询结果进行排序,`DESC`表示降序
四、数据删除与表结构修改:维护数据完整性 习题8:删除学号为某个特定值(假设为2)的学生记录
解析与操作: sql DELETE FROM Students WHERE ID =2; 注意:执行DELETE操作前,请确认要删除的记录,以免误删重要数据
习题9:将Students表中的Gender字段改名为`Sex`,同时将其类型更改为ENUM(M, F)
解析与操作: sql ALTER TABLE Students CHANGE COLUMN Gender Sex ENUM(M, F); 说明:CHANGE COLUMN不仅可用于重命名字段,还能同时修改其数据类型
五、高级查询与优化:提升数据处理能力 习题10:使用聚合函数计算Students表中不同班级的学生人数
解析与操作: sql SELECT Class, COUNT() AS StudentCount FROM Students GROUP BY Class; 说明:COUNT()是常用的聚合函数,用于计算记录数;`GROUP BY`子句用于按指定字段分组
习题11:查询年龄最大和最小的学生信息
解析与操作: - 年龄最大: sql SELECT - FROM Students WHERE Age = (SELECT MAX(Age) FROM Students); - 年龄最小: sql SELECT - FROM Students WHERE Age = (SELECT MIN(Age) FROM Students); 说明:子查询用于获取最大值或最小值,外层查询根据这些值筛选记录
六、索引与约束:提升查询效率与数据准确性 习题12:为Students表的Name字段创建唯一索引,确保姓名不重复
解析与操作: sql CREATE UNIQUE INDEX idx_name ON Students(Name); 说明:唯一索引保证字段值的唯一性,有助于防止数据重复
习题13:向Students表中添加一个外键约束,假设有一个`Classes`表,其主键为`ClassID`,要求`Students`表中的`Class`字段引用`Classes`表的`ClassID`
解析与操作:首先确保Classes表存在并包含`ClassID`字段,然后添加外键约束
sql --假设Classes表已存在,结构如下: -- CREATE TABLE Classes(ClassID INT PRIMARY KEY, ClassName VARCHAR(100)); ALTER TABLE Students ADD CONSTRAINT fk_class FOREIGN KEY(Class) REFERENCES Classes(ClassID); 注意:实际操作中,由于Class字段类型与`ClassID`不匹配(一个是V