mysql实战题目练习

2024-05-15 09:20

本文主要是介绍mysql实战题目练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、创建和管理数据库

  • 创建一个名为school的数据库。

  • 列出所有的数据库,并确认school数据库已经创建。

  • 如果school数据库已经存在,删除它并重新创建。

  • mysql> create database school;
    Query OK, 1 row affected (0.01 sec)mysql> 
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | school             |
    | sys                |
    | zabbix             |
    +--------------------+
    6 rows in set (0.01 sec)

    2、创建数据表

  • school数据库中,创建一个名为students的表,包含以下字段:id(整数,主键,自增)、name(字符串,最大长度50)、age(整数)和grade(字符串,最大长度10)。

  • 创建一个名为courses的表,包含course_id(整数,主键,自增)、course_name(字符串,最大长度100)和teacher(字符串,最大长度50)。

  • mysql> create table students(id int auto_increment primary key,name varchar(50),age int,grade varchar(10));
    Query OK, 0 rows affected (0.06 sec)
    mysql> create  table courses(course_id int auto_increment primary key,course_name varchar(100),teacher varchar(50));
    Query OK, 0 rows affected (0.01 sec)

    3、插入数据

  • students表中插入一些示例数据。

  • courses表中插入一些示例数据

  • mysql> insert into students(name,age,grade)values('zhsan',20,1);
    Query OK, 1 row affected (0.00 sec)
    mysql> INSERT INTO students (name, age, grade) VALUES ('李四', 19, '二年级');
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from courses;
    Empty set (0.00 sec)mysql> select * from students;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | zhsan  |   20 | 1         |
    |  2 | 李四   |   19 | 二年级    |
    +----+--------+------+-----------+
    2 rows in set (0.00 sec)
    mysql> update  students set name='张三',grade='一年级' where id=1;
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from students;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   20 | 一年级    |
    |  2 | 李四   |   19 | 二年级    |
    +----+--------+------+-----------+
    2 rows in set (0.00 sec)
    mysql> insert into courses(course_name,teacher)values('数学','张老师');
    Query OK, 1 row affected (0.00 sec)mysql> insert into courses(course_name,teacher)values('语文','王老师';
    Query OK, 1 row affected (0.00 sec)mysql> select * from courses;
    +-----------+-------------+-----------+
    | course_id | course_name | teacher   |
    +-----------+-------------+-----------+
    |         1 | 数学        | 张老师    |
    |         2 | 语文        | 王老师    |
    +-----------+-------------+-----------+
    2 rows in set (0.00 sec)mysql> 

    4、基本查询

  • 查询students表中的所有数据。

  • 查询年龄大于或等于20岁的学生信息。

  • 查询姓名为"张三"的学生的所有信息。

  • mysql> select * from students;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   20 | 一年级    |
    |  2 | 李四   |   19 | 二年级    |
    +----+--------+------+-----------+
    2 rows in set (0.00 sec)
    mysql> select * from students where age>=20;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   20 | 一年级    |
    +----+--------+------+-----------+
    1 row in set (0.00 sec)
    mysql> select * from students where name='张三';
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   20 | 一年级    |
    +----+--------+------+-----------+
    1 row in set (0.00 sec)
    

    5、更新和删除数据

  • 将名为"张三"的学生的年龄更新为21岁。

  • 删除年龄小于18岁的学生信息。

  • mysql> update students set age=21 where name='张三';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    mysql> select * from students ;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   21 | 一年级    |
    |  2 | 李四   |   19 | 二年级    |
    +----+--------+------+-----------+
    2 rows in set (0.00 sec)
    mysql> insert into students(name,age,grade)values('王五',17,'一年级');
    Query OK, 1 row affected (0.01 sec)
    mysql> select * from students;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   21 | 一年级    |
    |  2 | 李四   |   19 | 二年级    |
    |  4 | 王五   |   17 | 一年级    |
    +----+--------+------+-----------+
    3 rows in set (0.00 sec)mysql> delete from students where age<18;
    Query OK, 1 row affected (0.00 sec)mysql> select * from students;
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   21 | 一年级    |
    |  2 | 李四   |   19 | 二年级    |
    +----+--------+------+-----------+
    2 rows in set (0.00 sec)mysql> 

    6、多表查询

  • (假设存在一个关联表student_courses,表示学生和课程的关联关系)

  • 查询所有选修了"数学"课程的学生信息。

  • 查询每个学生的选课数量。

  • mysql> create table student_courses(student_id int,course_id int,foreign key (student_id) references student(id),foreign key(course_id)references courses(course_id));
    Query OK, 0 rows affected (0.01 sec)
    mysql> insert into student_courses(student_id,course_id)values(1,2);
    Query OK, 1 row affected (0.01 sec)mysql> insert into student_courses(student_id,course_id)values(2,2);
    Query OK, 1 row affected (0.01 sec)mysql> insert into student_courses(student_id,course_id)values(2,1);
    Query OK, 1 row affected (0.00 sec)mysql> SELECT s.name, s.age, s.grade  -> FROM student s  -> JOIN student_courses sc ON s.id = sc.student_id  -> JOIN courses c ON sc.course_id = c.course_id  -> WHERE c.course_name = '数学';
    +--------+------+-----------+
    | name   | age  | grade     |
    +--------+------+-----------+
    | 张三   |   21 | 一年级    |
    | 李四   |   19 | 二年级    |
    +--------+------+-----------+
    2 rows in set (0.00 sec)

    7、事务处理

  • 编写一个事务,将学生"李四"选修的"数学"课程更改为"物理",并确保如果更改失败,则回滚到之前的状态。

  • BEGIN TRANSACTIONSTART TRANSACTION:开始一个新的事务。

  • COMMIT:提交事务,将事务中的所有更改保存到数据库。

  • ROLLBACK:撤销事务,回滚到事务开始之前的状态,撤销所有在事务中所做的更改

    mysql> start transaction;
    Query OK, 0 rows affected (0.00 sec)
    mysql> update student_courses  set course_id=(select course_id from courses where course_name='物理')  where student_id=(select id from student where name="李四") and course_id=(select course_id from courses where course_name='数学') and course_id=(select course_id from courses where course_name='数学');
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    mysql> commit;
    Query OK, 0 rows affected (0.00 sec)

    8、索引和约束

    students表的name字段上创建一个唯一索引,确保每个学生都有一个唯一的姓名。

    courses表的course_name字段上创建一个普通索引,以优化查询性能。

  • mysql> create unique index idx_name on student(name);
    Query OK, 0 rows affected (0.07 sec)
    Records: 0  Duplicates: 0  Warnings: 0mysql> create index idx_course_name on courses(course_name);
    Query OK, 0 rows affected (0.05 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    9、聚合函数和分组

  • 查询每个年级的学生数量。

  • 查询年龄最大的学生信息。

  • mysql> select grade,count(*) as student_count from student group by grade;
    +-----------+---------------+
    | grade     | student_count |
    +-----------+---------------+
    | 一年级    |             1 |
    | 二年级    |             1 |
    +-----------+---------------+
    2 rows in set (0.01 sec)mysql> 
    mysql> select * from student where age=(select max(age) from student);
    +----+--------+------+-----------+
    | id | name   | age  | grade     |
    +----+--------+------+-----------+
    |  1 | 张三   |   21 | 一年级    |
    +----+--------+------+-----------+
    1 row in set (0.00 sec)mysql> 

10、视图和存储过程

  • 创建一个视图,显示年龄大于20岁的学生及其选课信息。

  • 编写一个存储过程,用于添加新的学生和课程关联记录。

  • mysql> create view view_age20 as-> select s.id,s.name,s.age,sc.course_id,c.course_name-> from student s-> join student_courses sc on s.id=sc.student_id-> join courses c on sc.course_id=c.course_id-> where s.age >20;
    Query OK, 0 rows affected (0.01 sec)mysql> delimiter //
    mysql> create procedure addsc(in student_id int,in course_id int)-> begin insert into student_courses(student_id,course_id)values (student_id,course_id);-> -> end  //
    Query OK, 0 rows affected (0.02 sec)
    mysql> delimiter ;

这篇关于mysql实战题目练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991438

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模