无法安装着名的Sakila示例数据库

时间:2018-01-08 19:26:11

标签: import phpmyadmin mariadb

主持人: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

下载了数据库

点击"详情"无处可去

非常感谢任何帮助理解此消息以及如何解决问题。

3 个答案:

答案 0 :(得分:0)

我正在读这个,或者您是否尝试创建同一个表中列的外键关系?您需要将表A的主键与表B中的外键相关联。因此,这些称为关系数据库。 设计数据库在Excel Spreadsheets(或Libre Office)中执行,并在一张纸上执行列(在不同表中)之间的关系。之后,您可以通过phpadmin将spsasheets中的csv或txt导出表导入到创建的数据库中。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

面对同样的问题
解决它,这就是我所做的
我浏览了架构代码,并决定分别复制创建表命令。
因此,出现此表的第一个表是地址表,该地址表引用了尚未创建的国家表,并且国家表将返回相同的错误,因为它引用了尚未创建的城市表中的外键到
所以我要做的是从城市表开始。
因此,我复制了create cities table command并在MySQL中运行,然后运行了create countries tablecreate addresses table。工作正常。
因此,如果您了解逻辑,便可以一张一张地安装表格。 这是一个缓慢的过程,但是可行的解决方案。