【问题标题】:Trouble installing the famous Sakila example database安装著名的 Sakila 示例数据库时遇到问题
【发布时间】: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版本。

标签: import phpmyadmin mariadb


【解决方案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),但不允许删除这些值。也许这个讨论会有所帮助:stackoverflow.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。效果很好。
    因此,如果您了解逻辑,您将能够一一安装表格。 这是一个缓慢的过程,但一个可行的解决方案。

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      相关资源
      最近更新 更多