安装著名的 Sakila 示例数据库时遇到问题

Posted

技术标签:

【中文标题】安装著名的 Sakila 示例数据库时遇到问题【英文标题】:Trouble installing the famous Sakila example database 【发布时间】:2018-06-17 19:40:14 【问题描述】:

主机:000webhost.com

php:7.1.11

innodb_version 5.6.36-82.2 版本 10.1.29-MariaDB version_comment MariaDB 服务器 version_compile_os Linux

PHPMyAdmin 4.76

嗨,

我在拥有上述所有软件的免费虚拟主机上设置了一个帐户。我正在尝试学习 PHP 和 mysql。为此,我正在尝试安装著名的 Sakila 数据库。

我在通过 phpMyAdmin 导入数据库时​​遇到问题。

当我上传 sakila-schema.sql 时,创建地址表失败:

CREATE TABLE address (
  address_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  address VARCHAR(50) NOT NULL,
  address2 VARCHAR(50) DEFAULT NULL,
  district VARCHAR(20) NOT NULL,
  city_id SMALLINT UNSIGNED NOT NULL,
  postal_code VARCHAR(10) DEFAULT NULL,
  phone VARCHAR(20) NOT NULL,
  /*!50705 location GEOMETRY NOT NULL,*/
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY  (address_id),
  KEY idx_fk_city_id (city_id),
  /*!50705 SPATIAL KEY `idx_location` (location),*/
  CONSTRAINT `fk_address_city` FOREIGN KEY (city_id) REFERENCES city (city_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

我收到这条我不明白的错误消息:

Error

SQL query:

CREATE TABLE address (
  address_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  address VARCHAR(50) NOT NULL,
  address2 VARCHAR(50) DEFAULT NULL,
  district VARCHAR(20) NOT NULL,
  city_id SMALLINT UNSIGNED NOT NULL,
  postal_code VARCHAR(10) DEFAULT NULL,
  phone VARCHAR(20) NOT NULL,
  /*!50705 location GEOMETRY NOT NULL,*/
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY  (address_id),
  KEY idx_fk_city_id (city_id),
  /*!50705 SPATIAL KEY `idx_location` (location),*/
  CONSTRAINT `fk_address_city` FOREIGN KEY (city_id) REFERENCES city (city_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8

MySQL said: Documentation
#1005 - Can't create table `id4176233_sakiladb`.`address` (errno: 150 "Foreign key constraint is incorrectly formed") (Details…)

我没有把它放在那里。 Sakila 数据库是一个旧的示例数据库,用于帮助人们学习(或者在我的情况下重新学习)SQL。我下载了带有 schema.sql(该语句来自哪里)和 data.sql 的数据库

点击“详细信息”无济于事

任何帮助理解此消息以及如何解决问题将不胜感激。

【问题讨论】:

运行导入后,您应该能够在以下输出中找到更好的错误消息:“show engine innodb status;” Sakila 数据库相当特定于特定的 MySQL 版本,因为它们在 MySQL 中可用时向 Sakila 添加了新功能。您下载的版本可能与您正在运行的 MariaDB 版本不兼容。乍一看,您应该使用为 MySQL 5.7 设计的 Saikila;是你下载的那个吗? 这是一条有用的信息。很抱歉很久才回复你。这是业余时间学习的事情,工作分心。我会检查数据库和Saikila版本。 【参考方案1】:

我读对了吗,还是您尝试创建与同一个表中的列的外键关系?您需要将表 A 的主键与表 B 中的外键相关联。因此,这些称为关系数据库。 要设计数据库,请在 Excel 电子表格(或 Libre Office)中完成,并在一张纸上完成列(不同表之间)的关系。之后,您可以通过 phpadmin 将您的电子表格中的 csv 或 txt 导出表格导入您创建的数据库中。

【讨论】:

我没有把它放在那里。 Sakila 数据库是一个旧的示例数据库,用于帮助人们学习(或者在我的情况下重新学习)SQL。我下载了带有 schema.sql 的数据库(该语句来自哪里)和 data.sql 嗨史蒂夫,当我读到这行:CONSTRAINT 'fk_address_city' FOREIGN KEY (city_id) REFERENCES city (city_id) ON DELETE RESTRICT ON UPDATE CASCADE 时,似乎存在权限问题。您告诉允许更改 city 表中的值(更新 Cascade),但不允许删除这些值。也许这个讨论会有所帮助:***.com/questions/1481476/… 谢谢。我可能只是去获取一个不同的示例数据库。很高兴知道问题是什么。谢谢。【参考方案2】:

根据 dev.mysql.com 的安装说明,您可以在 mysql 提示符下进行: 源 C:/temp/sakila-db/sakila-schema.sql; 源 C:/temp/sakila-db/sakila-data.sql 但这是不可能的,因为在创建表期间,它们包含对尚未创建的另一个表的引用!在创造的那一刻,他们只是没有提及任何东西!我通过从 create table 中删除约束外键并将它们分别添加到 ALTER TABLE 命令中来纠正此问题。这成功地创建了所有相关的表。从“sakila-data.sql”填充这些表时出现了另一个问题。某些表格如“film*”无法插入数据,可能是由于脚本和表格中的字段数不相等。

【讨论】:

【参考方案3】:

遇到同样的问题 解决它,这就是我所做的 我查看了架构代码并决定单独复制创建表命令。 因此,调出该表的第一个表是地址表,它引用了尚未创建的国家/地区表,而国家/地区表将返回相同的错误,因为它引用了尚未创建的城市表中的外键 所以我所做的就是从城市表开始。 所以我复制了create cities table command并在MySQL中运行,然后是create countries tablecreate addresses table。效果很好。 因此,如果您了解逻辑,您将能够一一安装表格。 这是一个缓慢的过程,但一个可行的解决方案。

【讨论】:

以上是关于安装著名的 Sakila 示例数据库时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 性能优化

MySQL-创建示例数据库(sakila)

MySQL 官方样板数据库sakila

为 Sakila 数据仓库创建 Actor 维度

如何安装MySQL官方的sakila数据库?

Sakila db SQL 查找租借>10部恐怖片的客户