
本文旨在为你提供一系列有深度、具实践性的练习题目及解析,帮助你全面掌握MySQL数据库的管理与应用技能
无论你是初学者还是希望进一步提升的数据库管理员,这些练习都将是你提升MySQL技能不可或缺的宝贵资源
一、基础操作练习 1. 创建数据库与表 题目:创建一个名为“School”的数据库,并在其中创建两张表:“Students”(学生信息表)和“Courses”(课程信息表)
“Students”表包含以下字段:学号(ID,主键,自增)、姓名(Name,VARCHAR类型)、年龄(Age,INT类型);“Courses”表包含以下字段:课程号(CourseID,主键,自增)、课程名(CourseName,VARCHAR类型)、学分(Credits,FLOAT类型)
解析: sql -- 创建数据库 CREATE DATABASE School; -- 使用数据库 USE School; -- 创建Students表 CREATE TABLE Students( ID INT AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(50) NOT NULL, Age INT NOT NULL ); -- 创建Courses表 CREATE TABLE Courses( CourseID INT AUTO_INCREMENT PRIMARY KEY, CourseName VARCHAR(100) NOT NULL, Credits FLOAT NOT NULL ); 2. 数据插入与查询 题目:向“Students”表中插入5条学生记录,向“Courses”表中插入3条课程记录,并查询所有学生信息
解析: sql --插入学生信息 INSERT INTO Students(Name, Age) VALUES(Alice,20),(Bob,22),(Charlie,21),(David,23),(Eva,20); --插入课程信息 INSERT INTO Courses(CourseName, Credits) VALUES(Mathematics,3.0),(Physics,4.0),(History,2.0); -- 查询所有学生信息 SELECTFROM Students; 二、进阶操作练习 3. 数据更新与删除 题目:将“Students”表中年龄为20的学生年龄修改为21,并删除“Courses”表中课程名为“History”的记录
解析: sql -- 更新学生年龄 UPDATE Students SET Age =21 WHERE Age =20; -- 删除课程记录 DELETE FROM Courses WHERE CourseName = History; 4. 表连接查询 题目:创建第三张表“Enrollments”(选课记录表),包含字段:学号(StudentID,外键,引用“Students”表的ID)、课程号(CourseID,外键,引用“Courses”表的CourseID)、成绩(Grade,FLOAT类型)
向“Enrollments”表中插入数据,并查询所有学生及其所选课程信息(包括课程名和成绩)
解析: sql -- 创建Enrollments表 CREATE TABLE Enrollments( StudentID INT, CourseID INT, Grade FLOAT, PRIMARY KEY(StudentID, CourseID), FOREIGN KEY(StudentID) REFERENCES Students(ID), FOREIGN KEY(CourseID) REFERENCES Courses(CourseID) ); --插入选课记录(假设每个学生选择了一门课程) INSERT INTO Enrollments(StudentID, CourseID, Grade) VALUES (1,1,85.0),(2,2,90.0),(3,3,78.0), (4,1,88.0),(5,2,92.0); -- 查询所有学生及其所选课程信息 SELECT Students.Name, Courses.CourseName, Enrollments.Grade FROM Enrollments JOIN Students ON Enrollments.StudentID = Students.ID JOIN Courses ON Enrollments.CourseID = Courses.CourseID; 三、高级功能练习 5.索引与性能优化 题目:为“Students”表的“Name”字段创建索引,并比较创建索引前后的查询性能(查询名为“Alice”的学生信息)
解析: sql -- 创建索引 CREATE INDEX idx_name ON Students(Name); -- 查询性能对比(使用EXPLAIN查看查询计划) -- 创建索引前 EXPLAIN SELECT - FROM Students WHERE Name = Alice; -- 创建索引后 EXPLAIN SELECT - FROM Students WHERE Name = Alice; 通过`EXPLAIN`命令,你可以观察到创建索引后查询效率的提升,索引可以显著加快特定查询的速度
6.视图与存储过程 题目:创建一个视图“StudentGrades”,显示学生姓名、课程名及成绩,并编写一个存储过程“GetStudentAverageGrade”,输入学生学号,返回该学生的平均成绩
解析: sql -- 创建视图 CREATE VIEW StudentGrades AS SELECT Students.Name, Courses.CourseName, Enrollments.Grade FROM Enrollments JOIN Students ON Enrollments.StudentID = Students.ID JOIN Courses ON Enrollments.CourseID = Courses.CourseID; -- 创建存储过程 DELIMITER // CREATE PROCEDURE GetStudentAverageGrade(IN studentID INT, OUT avgGrade FLOAT) BEGIN SELECT AVG(Grade) INTO avgGrade FROM Enrollments WHERE StudentID = studentID; END // DELIMITER ; --调用存储过程并获取结果 CALL GetStudentAverageGrade(1, @avgGrade); SELECT @avgGrade; 7.触发器与事务 题目:创建一个触发器,当向“Enrollments”表中插入新记录时,检查学生成绩是否大于100或小于0,若是,则阻止插入并给出提示
另外,编写一个事务,插入一条学生记录,同时尝试插入两条选课记录,如果其中任何一条插入失败,则回滚整个事务
解析: sql -- 创建触发器 DELIMITER // CREATE TRIGGER check_grade BEFORE I
MySQL干净卸载全步骤指南
MySQL数据教程课后实操练习指南
Linux系统卸载MySQL配置指南
MySQL文本限定符使用技巧解析
MySQL管理权限不足?解锁管理员权限全攻略
1. 《MySQL主从复制:从机开启读操作全解析》2. 《速看!MySQL主从复制从机读开启指南
1. 《MySQL中AS语句用法全解析》2. 《速览!MySQL AS语句妙用》3. 《MySQL AS语句实战
MySQL干净卸载全步骤指南
Linux系统卸载MySQL配置指南
MySQL文本限定符使用技巧解析
MySQL管理权限不足?解锁管理员权限全攻略
1. 《MySQL主从复制:从机开启读操作全解析》2. 《速看!MySQL主从复制从机读开启指南
1. 《MySQL中AS语句用法全解析》2. 《速览!MySQL AS语句妙用》3. 《MySQL AS语句实战
1. 《Java连接池高效连接MySQL全攻略》2. 《Java连接池操作MySQL的实用指南》3. 《巧
保障MySQL数据稳定性的秘诀
MySQL中基于Timestamp建索引技巧
如何设置MySQL服务实现开机自启动,轻松管理数据库
MySQL速查:如何查看表结构列
MySQL组内排序,高效提取前两项