本节描述了 Sakila 示例数据库每个版本中的更改。
修复了 MySQL 错误 #112131:将 film_text.film_id 字段设为无符号,以匹配其他 film_id 定义。
film_list 和 nicer_but_slower_film_list 视图不返回没有演员的电影。
修复了 MySQL 错误 #106951:
city
和country
字段中缺少带重音符号的字符;它们的值已使用world
数据库更新。此外,也缺少尖音符号本身。修复了 MySQL 错误 #107158:删除了 payment 表中 rental_id 值为空的五行。
数据库对象现在使用
utf8mb4
而不是utf8
。此更改导致 MySQL 5.6 中film.title
列出现指定的键过长;最大键长度为 767 个字节
错误,该列声明为VARCHAR(255)
。实际的最大标题长度为 27 个字符,因此该列被重新声明为VARCHAR(128)
,以避免超过最大键长度。sakila-schema.sql
和sakila-data.sql
包含SET NAMES utf8mb4
语句。sakila-data.sql
已从 DOS (CRLF) 行结尾转换为 Unix (LF) 行结尾。address.location
列是一个GEOMETRY
列,它有一个SPATIAL
索引。从 MySQL 8.0.3 开始,除非索引空间列具有SRID
属性,否则将忽略SPATIAL
索引。location
列已更改为包含SRID 0
属性,适用于 MySQL 8.0.3 及更高版本。staff.password
列声明为VARCHAR(40) BINARY
。这是在字符列声明中使用BINARY
作为指定_bin
排序规则的简写,从 MySQL 8.0.17 开始已弃用。该列被重新声明为BINARY
的简写形式,即VARCHAR(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
。在
rewards_report()
存储过程中,min_dollar_amount_purchased
参数声明为DECIMAL(10,2) UNSIGNED
。从 MySQL 8.0.17 开始,不建议将UNSIGNED
与DECIMAL
一起使用。该参数在重新声明时未包含UNSIGNED
。film_in_stock()
和film_not_in_stock()
存储过程使用了FOUND_ROWS()
函数,该函数从 MySQL 8.0.17 开始已弃用。在每个过程中,FOUND_ROWS()
查询都被替换为使用COUNT(*)
的查询,该查询与其关联查询使用相同的FROM
和WHERE
子句。这比使用FOUND_ROWS()
更昂贵,但产生相同的结果。在 MySQL 5.6.10 之前的版本中,
film_text
表使用MyISAM
而不是InnoDB
,以避免在旧版本中创建表失败。(但是,我们仍然建议升级到 MySQL 5.6.10 或更高版本。)MySQL Workbench 的
sakila.mwb
文件已根据上述更改进行了更新。
删除了所有
MyISAM
引用。film_text
表及其FULLTEXT
定义现在使用InnoDB
。如果您使用的是较旧的 MySQL 服务器版本(5.6.10 及更低版本),我们建议升级 MySQL。如果无法升级,请在sakila-schema.sql
SQL 文件中将film_text
表的ENGINE
值更改为MyISAM
。
-
通过使用 MySQL 特定于版本的注释,将
sakila-schema.sql
和sakila-spatial-schema.sql
合并到一个文件中。从 MySQL 服务器 5.7.5(向
InnoDB
添加了空间索引支持时)开始,空间数据(例如address.location
)将插入到 sakila 数据库中。此外,从 MySQL 服务器 5.6.10 开始使用InnoDB
全文搜索,在此之前使用的是MyISAM
。
添加了 Sakila 示例数据库的另一个副本,其中包含使用几何数据类型的空间数据。这可以作为单独的下载获得,并且需要 MySQL 服务器 5.7.5 或更高版本。要使用此数据库,请加载
sakila-spatial-schema.sql
文件而不是sakila-schema.sql
文件。修改了
nicer_but_slower_film_list
和film_list
视图定义的GROUP BY
子句,以使其与ONLY_FULL_GROUP_BY
SQL 模式兼容,该模式从 MySQL 5.7.5 开始默认启用。
更正了
upd_film
触发器定义,以包含对film_id
值的更改。添加了
actor_info
视图。更改了
inventory_held_by_customer
函数的错误处理程序。函数现在有一个针对NOT FOUND
的退出处理程序,而不是更隐晦的1329
。将新 BSD 许可证的模板添加到架构和数据文件中。
在适用的情况下,将
READS SQL DATA
添加到存储过程和函数中,以支持在 MySQL 5.1 上加载。修复了
rewards_report
过程中日期范围问题(感谢 Goplat)。
修复了
sales_by_store
视图中的一个错误,该错误导致每个商店都列出了相同的经理。修复了
inventory_held_by_customer
函数中的一个错误,该错误导致函数返回多行。将
rental_date
触发器移动到sakila-data.sql
文件中,以防止它干扰数据加载。
添加了
film_in_stock
存储过程。添加了
film_not_in_stock
存储过程。添加了
inventory_help_by_customer
存储函数。添加了
inventory__in_stock
存储函数。优化了用于加载的数据文件(多行
INSERT
语句、事务)。(感谢 Giuseppe)修复了
payment
表加载脚本中的一个错误,该错误导致付款金额无限增加。
添加了
sales_by_store
和sales_by_film_category
视图,由 Jay Pipes 提交。添加了
rewards_report
存储过程,由 Jay Pipes 提交。添加了
get_customer_balance
存储过程。添加了
sakila-data.sql
文件,用于将数据加载到示例数据库中。
将
address.district
更改为VARCHAR(20)
。将
customer.first_name
更改为VARCHAR(45)
。将
customer.last_name
更改为VARCHAR(45)
。将
customer.email
更改为VARCHAR(50)
。添加了
payment.rental_id
列(一个INT NULL
列)。为
payment.rental_id
到rental.rental_id
添加了外键。添加了
rental.rental_id
,INT Auto_Increment
,使其成为代理主键,旧主键更改为UNIQUE
键。
所有表都有一个具有传统行为(
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)的last_update
TIMESTAMP
列。actor_id
现在是SMALLINT
。address_id
现在是SMALLINT
。category_id
现在是TINYINT
。city_id
现在是SMALLINT
。country_id
现在是SMALLINT
。customer_id
现在是SMALLINT
。customer
表中的first_name
、last_name
现在是CHAR
而不是VARCHAR
。customer
表现在有email CHAR(50)
。customer
表上的create_date
现在是DATETIME
(以适应last_update TIMESTAMP
)。customer
表有一个新的ON INSERT
触发器,用于强制将create_date
列设置为NOW()
。film_id
现在是SMALLINT
。film.description
现在有DEFAULT NULL
。添加了类型为
YEAR
的film.release_year
。添加了
film.language_id
和film.original_language_id
以及language
表。对于可能已添加字幕的外国电影,original_language_id
可以是NULL
,language_id
是NOT NULL
。film.length
现在是SMALLINT
。删除了
film.category_id
列。新表:
film_category
;允许每部电影有多个类别。删除了
film_text.category_id
列。inventory_id
现在是MEDIUMINT
。payment_id
现在是SMALLINT
。payment.payment_date
现在是DATETIME
。向
payment
表添加了触发器,以强制在INSERT
时将payment_date
设置为NOW()
。rental.rent_date
现在是rental.rental_date
,并且现在是DATETIME
。在
rental
表中添加了触发器,以确保在INSERT
操作时将rental_date
设置为NOW()
。staff_id
现在是TINYINT
类型。添加了
staff.email
列(VARCHAR(50)
)。添加了
staff.username
列(VARCHAR(16)
)。store_id
现在是TINYINT
类型。更新了
film_list
视图以处理新的film_category
表。更新了
nicer_but_slower_film_list
视图以处理新的film_category
表。