【跟着例子学MySQL】学以致用 -- 综合练习


前言

在这里插入图片描述
举例子,是最简单有效的学习方法。本系列文章以一个贯穿始终的场景,结合多个实例讲解MySQL的基本用法。

为什么要写这个系列?

  • 模仿是最好的老师,实践是检验成果的方法。
  • 本系列以实操样例和应用场景为核心,将MySQL基本用法贯穿其中,达到学以致用的效果。

为什么要学习MySQL?

  • MySQL是最常用的数据库之一,具有简单易用的特点,适合初学者学习
  • 数据库的基本用法有相通之处,学会MySQL可以为学习其他数据库打下良好基础

跟别的入门教材有什么不同?

  • 以一个贯穿始终的应用场景为主线,渐进地讲解用法
  • 难度适中,既有基础方法,也有值得注意的关键细节

本系列文章不包含哪些内容?

该系列文章的目标是,将最核心的知识,以最直接的方式,呈现给初学者。因此不包含:

  • MySQL安装方法
  • MySQL系统管理方法,例如备份、恢复、导入导出等
  • 高级主题,例如数据库监控、数据库调优和SQL优化

回顾

上篇文章👉《【跟着例子学MySQL】连接方式 – 内连接和外连接》 讲了内连接和外连接的用法。这篇介绍综合练习。


租赁系统

假设你经营着一家小型汽车租赁公司,有10辆汽车和5辆卡车。你需要设计一个门户网站,把这些车辆放到网上。在初始阶段,门户网站应提供以下基本功能:

  1. 维护车辆和客户的记录。
  2. 询问有关车辆的可用性
  3. 预定车辆

客户记录中包含其姓名、地址和电话号码。

由车辆登记号码标识的车辆,可以每天租用。不同车辆的租车率也有所不同。7天或以上有20%的折扣。

客户租用需要指定开始日期和结束日期。首选客户可享受0-50%不等的特别客户折扣。

数据库

初始数据库包含3个表:vehicles、customers和rental_records。rental_records是一个支持车辆和客户之间多对多关系的连接表。

DROP DATABASE IF EXISTS `rental_db`;
CREATE DATABASE `rental_db`;
USE `rental_db`;

-- 创建`vehicles` 表
DROP TABLE IF EXISTS `vehicles`;
CREATE TABLE `vehicles` (
    `veh_reg_no` VARCHAR(8) NOT NULL,
    `category` ENUM('car', 'truck') NOT NULL DEFAULT 'car', -- 保存车辆类型的枚举列
    `brand` VARCHAR(30) NOT NULL DEFAULT '',
    `desc` VARCHAR(256) NOT NULL DEFAULT '', -- desc是一个关键字(表示降序),必须用反引号包围
    `photo` BLOB NULL, -- 高达64KB的二进制大对象
    `daily_rate` DECIMAL(6,2) NOT NULL DEFAULT 9999.99, -- 设置默认值为最大值
    PRIMARY KEY (`veh_reg_no`),
    INDEX (`category`) -- 在此列上构建索引以进行快速搜索
) ENGINE=InnoDB; -- InnoDB引擎支持外键和事务

DESC `vehicles`;
SHOW CREATE TABLE `vehicles` \G
SHOW INDEX FROM `vehicles` \G

-- 创建`customers` 表
DROP TABLE IF EXISTS `customers`;
CREATE TABLE `customers` (
    `customer_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
                  -- 始终对AUTO_INCREMENT列使用INT以避免溢出
    `name` VARCHAR(30) NOT NULL DEFAULT '',
    `address` VARCHAR(80) NOT NULL DEFAULT '',
    `phone` VARCHAR(15) NOT NULL DEFAULT '',
    `discount` DOUBLE NOT NULL DEFAULT 0.0,
    PRIMARY KEY (`customer_id`),
    UNIQUE INDEX (`phone`), -- 在此唯一值列上构建索引
    INDEX (`name`) -- 在此列上构建索引
) ENGINE=InnoDB;
DESC `customers`;
SHOW CREATE TABLE `customers` \G
SHOW INDEX FROM `customers` \G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师昌哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值