主持人: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
下载了数据库点击"详情"无处可去
非常感谢任何帮助理解此消息以及如何解决问题。
答案 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 table
和create addresses table
。工作正常。
因此,如果您了解逻辑,便可以一张一张地安装表格。
这是一个缓慢的过程,但是可行的解决方案。