安装著名的 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 table
和create addresses table
。效果很好。
因此,如果您了解逻辑,您将能够一一安装表格。
这是一个缓慢的过程,但一个可行的解决方案。
【讨论】:
以上是关于安装著名的 Sakila 示例数据库时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章