MySQL作为一种广泛使用的开源关系型数据库管理系统,掌握它对于数据管理、网站开发、企业级应用等都有着至关重要的作用。为了帮助您更好地掌握MySQL数据库,以下是一系列实战练习题,涵盖了MySQL的基础知识和高级应用。通过这些练习,您将能够熟练地运用MySQL进行数据库设计和操作。
1. 数据库的基本操作
题目1: 创建一个名为student的数据库,并设置字符集为utf8。
CREATE DATABASE student CHARACTER SET utf8;
题目2: 选择student数据库。
USE student;
2. 表的基本操作
题目3: 创建一个名为students的表,包含字段:id(主键,自增),name(字符串,非空),age(整数),gender(字符串)。
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
gender CHAR(1)
);
题目4: 插入一条记录到students表。
INSERT INTO students (name, age, gender) VALUES ('Alice', 20, 'F');
3. 数据查询
题目5: 查询所有学生的姓名和年龄。
SELECT name, age FROM students;
题目6: 查询所有年龄大于20岁的学生姓名。
SELECT name FROM students WHERE age > 20;
4. 数据更新
题目7: 将学生Alice的年龄更新为21岁。
UPDATE students SET age = 21 WHERE name = 'Alice';
5. 数据删除
题目8: 删除年龄小于18岁的学生记录。
DELETE FROM students WHERE age < 18;
6. 约束和索引
题目9: 在students表中为name字段创建唯一索引。
CREATE UNIQUE INDEX idx_name ON students (name);
7. 视图和存储过程
题目10: 创建一个视图view_students,包含学生的姓名和性别。
CREATE VIEW view_students AS SELECT name, gender FROM students;
题目11: 创建一个存储过程update_age,接收一个学生ID和一个新的年龄,更新该学生的年龄。
DELIMITER //
CREATE PROCEDURE update_age(IN student_id INT, IN new_age INT)
BEGIN
UPDATE students SET age = new_age WHERE id = student_id;
END //
DELIMITER ;
8. 备份与恢复
题目12: 将students表备份到当前目录下的backup_students.sql文件。
CREATE DATABASE BACKUP;
USE BACKUP;
CREATE TABLE students_backup LIKE students;
INSERT INTO students_backup SELECT * FROM students;
题目13: 从备份中恢复students表。
USE student;
DROP TABLE students;
INSERT INTO students SELECT * FROM BACKUP.students_backup;
9. 高级查询
题目14: 查询姓名中包含“a”的所有学生。
SELECT * FROM students WHERE name LIKE '%a%';
题目15: 查询年龄在18到25岁之间的学生姓名。
SELECT name FROM students WHERE age BETWEEN 18 AND 25;
10. 数据库安全
题目16: 创建一个名为admin的用户,密码为admin123,并授予所有权限。
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin123';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
11. 性能优化
题目17: 对students表的age字段创建索引。
CREATE INDEX idx_age ON students (age);
题目18: 查询数据库的慢查询日志。
SHOW VARIABLES LIKE 'slow_query_log';
12. 复杂查询
题目19: 查询所有姓“王”的学生的姓名和年龄。
SELECT name, age FROM students WHERE name LIKE '王%';
题目20: 查询年龄大于平均年龄的学生姓名和年龄。
SELECT name, age FROM students WHERE age > (SELECT AVG(age) FROM students);
13. 高级应用
题目21: 创建一个名为courses的表,包含字段:id(主键,自增),name(字符串,非空),teacher(字符串)。
CREATE TABLE courses (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
teacher VARCHAR(50)
);
题目22: 创建一个名为student_courses的关联表,包含字段:student_id(外键,关联students表的id),course_id(外键,关联courses表的id)。
CREATE TABLE student_courses (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
题目23: 插入一些数据到courses和student_courses表。
INSERT INTO courses (name, teacher) VALUES ('Math', 'Mr. Wang'), ('English', 'Mrs. Zhang');
INSERT INTO student_courses (student_id, course_id) VALUES (1, 1), (1, 2);
题目24: 查询所有学生的姓名和选课情况。
SELECT s.name, c.name AS course_name FROM students s
JOIN student_courses sc ON s.id = sc.student_id
JOIN courses c ON sc.course_id = c.id;
通过这些实战练习题,您可以逐步提高对MySQL数据库的理解和操作能力。不断练习和尝试,您将能够熟练地应对各种数据库操作挑战。祝您学习愉快!
