MySQL官方演示数据库Sakila 使用指南

MySQL官方演示数据库Sakila 使用指南

简介

Sakila数据库是MySQL 官方提供的一个演示数据库,旨在模拟电影租赁业务。它包含了各种数据库表,如影片、顾客、租赁、支付等,以及关联这些表格的外键关系。Sakila数据库的业务背景主要包括以下几个方面:

  1. 影片管理:Sakila数据库包含了各种影片的信息,如标题、描述、发行年份、租赁价格等。这些影片可以被顾客租借。

  2. 顾客管理:数据库中存储了各个顾客的信息,如姓名、地址、联系方式等。顾客可以通过租赁影片来享受娱乐服务。

  3. 租赁管理:租赁表格记录了顾客租借影片的信息,包括租赁日期、归还日期、租赁费用等。租赁管理方便了顾客和影片之间的交互。

  4. 支付管理:支付表格记录了顾客对租赁费用的支付情况,包括支付日期、支付金额等。支付信息与租赁信息相关联,用于管理费用的结算。

  5. 库存管理:库存表格记录了影片的库存情况,包括影片ID、库存量等信息。库存管理确保了影片的可供租借状态。

Sakila数据库可以用于学习数据库设计、SQL查询和业务逻辑的实践,是一个理想的教学和学习工具,也可用于书籍、教程、文章等的演示示例。Sakila数据库还可用于展现MySQL的功能,如视图、存储过程和触发器。

安装

Sakila样本数据库可从https://dev.mysql.com/doc/index-other.html获得。 可下载的存档有两种格式:tar文件或Zip格式。其中三个文件:sakila-schema.sql、sakila-data.sql和sakila.mwb。

提示

Sakila包含MySQL版本特定的注释,因为sakila模式和数据取决于您的MySQL服务器的版本。 例如,MySQL服务器5.7.5为InnoDB添加了对空间数据索引的支持,因此address地址表将包括MySQL 5.7.5及更高版本的空间感知的location列。

  • sakila-schema.sql:该文件包含创建Sakila数据库结构所需的所有CREATE语句,包括表、视图、存储过程和触发器。

  • sakila-data.sql: 该文件包含填充数据库所需的INSERT语句,以及初始数据加载后必须创建的触发器的定义。

  • sakila.mwb:该文件是一个MySQL工作台数据模型,可以在MySQL工作台中打开该模型来检查数据库结构。 有关更多信息,请参阅MySQL Workbench

要安装Sakila示例数据库,请按照以下步骤操作:

  1. 将下载的存档文件提取到临时位置,如C:\temp\/tmp/。当解压存档时,它会创建一个名为sakila-db的目录,其中包含sakila-schema.sqlsakila-data.sql文件。

2.使用mysql命令行客户端连接到MySQL服务器:

$> mysql -u root -p

输入密码。也可以使用非root帐户,前提是该帐户具有创建新数据库的权限。

  1. 执行sakila-schema.sql脚本创建数据库结构,然后执行sakila-data.sql脚本来填充数据库:
mysql> SOURCE C:/temp/sakila-db/sakila-schema.sql;
mysql> SOURCE C:/temp/sakila-db/sakila-data.sql;

sakila-schema.sqlsakila-data.sql文件的路径替换为系统上的实际路径。

提示

在Windows上,在执行SOURCE命令时使用斜杠而不是反斜杠。

  1. 执行以下语句,确认示例数据库已正确安装。
mysql> USE sakila;
Database changed

mysql> SHOW FULL TABLES;
+----------------------------+------------+
| Tables_in_sakila           | Table_type |
+----------------------------+------------+
| actor                      | BASE TABLE |
| actor_info                 | VIEW       |
| address                    | BASE TABLE |
| category                   | BASE TABLE |
| city                       | BASE TABLE |
| country                    | BASE TABLE |
| customer                   | BASE TABLE |
| customer_list              | VIEW       |
| film                       | BASE TABLE |
| film_actor                 | BASE TABLE |
| film_category              | BASE TABLE |
| film_list                  | VIEW       |
| film_text                  | BASE TABLE |
| inventory                  | BASE TABLE |
| language                   | BASE TABLE |
| nicer_but_slower_film_list | VIEW       |
| payment                    | BASE TABLE |
| rental                     | BASE TABLE |
| sales_by_film_category     | VIEW       |
| sales_by_store             | VIEW       |
| staff                      | BASE TABLE |
| staff_list                 | VIEW       |
| store                      | BASE TABLE |
+----------------------------+------------+
23 rows in set (0.01 sec)

mysql> SELECT COUNT(*) FROM film;
+----------+
| COUNT(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM film_text;
+----------+
| COUNT(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

数据结构

名称描述
actor演员表
address地址表
category类别表
city城市表
country国家表
customer客户表
film电影表
film_actor电影-演员关联表
film_category电影-类别关联表
film_text电影文本表
inventory库存表
language语言表
payment支付表
rental租赁表
staff员工表
store店铺表

实体关系图(ER图)

在这里插入图片描述

视图

视图描述
actor_info包含演员的详细信息的视图。
customer_list包含客户列表的视图。
film_list包含电影列表的视图。
nicer_but_slower_film_list包含更优质但速度较慢的电影列表的视图。

存储过程

名称描述
film_in_stock存储过程,用于获取库存中的电影信息。
film_not_in_stock存储过程,用于获取缺货的电影信息。
rewards_report存储过程,用于生成奖励报告。

存储函数

函数描述
get_customer_balance用于获取客户的余额信息。
inventory_held_by_customer用于获取客户持有的库存信息。
inventory_in_stock用于获取库存中的库存信息。

触发器

触发器描述
customer_create_date当创建客户时触发,用于记录客户创建日期。
payment_date当添加支付记录时触发,用于记录支付日期。
rental_date当添加租赁记录时触发,用于记录租赁日期。
ins_film当插入电影记录时触发的触发器。
upd_film当更新电影记录时触发的触发器。
del_film当删除电影记录时触发的触发器。

使用示例

租借DVD

要租借DVD,首先确认给定的库存项目是否有库存,然后向rental租赁表中插入一行记录。创建rental租赁表后,向payment支付表中插入一行记录。根据业务规则,还可能需要在处理租赁之前检查客户是否有未结清的余额。

SELECT inventory_in_stock(10);
INSERT INTO rental(rental_date, inventory_id, customer_id, staff_id) 
       VALUES(NOW(), 10, 3, 1);
SET @rentID = LAST_INSERT_ID(),
              @balance = get_customer_balance(3, NOW());
SELECT @rentID, @balance;
INSERT INTO payment (customer_id, staff_id, rental_id, amount,  payment_date)
       VALUES(3, 1, @rentID, @balance, NOW());

归还DVD

要归还DVD,更新rental租赁表并设置归还日期。为此,首先根据正在归还的物品的inventory_id确定要更新的rental_id。根据情况,可能需要检查客户余额,并可能通过向payment支付表中插入一行记录来处理逾期费用的付款。

SELECT rental_id
       FROM rental
       WHERE inventory_id = 10
       AND customer_id = 3
       AND return_date IS NULL
       INTO @rentID;
UPDATE rental
       SET return_date = NOW()
       WHERE rental_id = @rentID;
SELECT get_customer_balance(3, NOW());

查找逾期的DVDs

许多DVD商店每天制作一份逾期租金清单,以便联系客户并要求退回逾期DVD。

要创建这样的列表,请在rental租赁表中搜索返回日期为NULL的电影,并且租赁日期比film电影表中指定的租赁期限更远。如果是这样,电影逾期了,应该显示电影名称以及客户姓名和电话号码。

mysql> SELECT CONCAT(customer.last_name, ’, ‘, customer.first_name) AS customer,
           address.phone, film.title
           FROM rental INNER JOIN customer ON rental.customer_id = customer.customer_id
           INNER JOIN address ON customer.address_id = address.address_id
           INNER JOIN inventory ON rental.inventory_id = inventory.inventory_id
           INNER JOIN film ON inventory.film_id = film.film_id
           WHERE rental.return_date IS NULL
           AND rental_date + INTERVAL film.rental_duration DAY < CURRENT_DATE()
           ORDER BY title
           LIMIT 5;
+----------------+--------------+------------------+
| customer       | phone        | title            |
+----------------+--------------+------------------+
| OLVERA, DWAYNE | 62127829280  | ACADEMY DINOSAUR |
| HUEY, BRANDON  | 99883471275  | ACE GOLDFINGER   |
| OWENS, CARMEN  | 272234298332 | AFFAIR PREJUDICE |
| HANNON, SETH   | 864392582257 | AFRICAN EGG      |
| COLE, TRACY    | 371490777743 | ALI FOREVER      |
+----------------+--------------+------------------+
5 rows in set (0.10 sec)
  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SakilaMySQL官方提供的一个样例数据库,用于演示和练习MySQL数据库的使用。数据库包含了一个虚构的DVD租赁店的数据,其中包括客户、电影、租赁记录等等。 Sakila数据库包含16张表,包括: 1. `actor`:演员表,包含演员的ID、名字和最后更新时间。 2. `address`:地址表,包含地址的ID、地址、邮编、电话和最后更新时间。 3. `category`:电影类别表,包含类别的ID和名称以及最后更新时间。 4. `city`:城市表,包含城市的ID、城市名称、国家ID和最后更新时间。 5. `country`:国家表,包含国家的ID、国家名称和最后更新时间。 6. `customer`:客户表,包含客户的ID、姓名、地址、邮编、电话、积分、注释和最后更新时间。 7. `film`:电影表,包含电影的ID、标题、描述、发行年份、语言ID、原始语言ID、租金、长度、评级和最后更新时间。 8. `film_actor`:电影演员表,包含电影ID和演员ID。 9. `film_category`:电影类别表,包含电影ID和类别ID。 10. `inventory`:库存表,包含DVD的ID、电影ID和最后更新时间。 11. `language`:语言表,包含语言的ID、名称和最后更新时间。 12. `payment`:支付表,包含支付的ID、客户ID、租赁ID、支付时间、租赁时长和支付金额。 13. `rental`:租赁表,包含租赁的ID、客户ID、电影ID、租赁时间和最后更新时间。 14. `staff`:员工表,包含员工的ID、姓名、地址、邮编、电话、邮箱、店铺ID、用户名、密码和最后更新时间。 15. `store`:店铺表,包含店铺的ID、地址、邮编、电话和最后更新时间。 16. `sales_by_film_category`:按电影类别统计销售额的视图,包含类别名称和销售额。 使用Sakila数据库可以练习SQL查询、联结、聚合、子查询等等操作,是学习MySQL的很好的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值