错误 - 在 phpmyadmin 中导入 .sql 文件时
Error- When importing .sql file in phpmyadmin
我有一个 .sql 文件,它是用 MySQL Workbench 创建的。我已经导出文件从 Workbench 到 .sql。但是当我尝试导入这个 .sql localhost/phpmyadmin 中的文件显示错误。
1005 - Can't create table amarjobs
.profiles
(errno: 150 "Foreign
key constraint is incorrectly formed")
这是profiles
table:
-- Table `amarjobs`.`profiles`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `amarjobs`.`profiles` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'job seeker\'s profile table',
`userID` INT NULL,
`firstName` VARCHAR(45) NULL,
`lastName` VARCHAR(45) NULL,
`middleName` VARCHAR(45) NULL,
`DOB` DATE NULL,
`gender` ENUM('M','F','Other') NULL,
`featuredProfile` ENUM('Y','N') NULL DEFAULT 'N',
`email` VARCHAR(100) NULL,
`phone` VARCHAR(50) NULL,
`summary` VARCHAR(500) NULL,
`profilePic` VARCHAR(32) NULL,
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
PRIMARY KEY (`id`),
INDEX `fkProfilesUserID_idx` (`userID` ASC),
CONSTRAINT `fkProfilesUserID`
FOREIGN KEY (`userID`)
REFERENCES `amarjobs`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE CASCADE)
ENGINE = InnoDB;
有些table导入了,为什么profiles
table没有导入?你能告诉我问题出在哪里吗?
假设您正在从其他服务器导入数据。所以不应该有与外键创建相关的问题...
首先导入它的 parent table users
table 然后你可以导入这个 table。这是干净的方式。
否则你可以在设置foreign_key_checks禁用后强制导入。但是你不应该这样做并使用干净的方式。
更新:
您可以通过此查询获取所有相关的 table:
SELECT table_name AS 'My_Table',REFERENCED_TABLE_NAME AS 'Parent_Table' FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA ='pass_your_db_here' AND table_name in ('table1','table2',.....'tablen') AND REFERENCED_TABLE_NAME IS NOT NULL;
以上查询将为 parent_table 列中的所有 table 提供所有 parents tables,因此从 my_table & parent_table 从源服务器列出并备份这些 table 并在目标服务器上恢复。
您应该将 (id) 作为 amarjobs
.users
table.
中的主键
我有一个 .sql 文件,它是用 MySQL Workbench 创建的。我已经导出文件从 Workbench 到 .sql。但是当我尝试导入这个 .sql localhost/phpmyadmin 中的文件显示错误。
1005 - Can't create table
amarjobs
.profiles
(errno: 150 "Foreign key constraint is incorrectly formed")
这是profiles
table:
-- Table `amarjobs`.`profiles`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `amarjobs`.`profiles` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'job seeker\'s profile table',
`userID` INT NULL,
`firstName` VARCHAR(45) NULL,
`lastName` VARCHAR(45) NULL,
`middleName` VARCHAR(45) NULL,
`DOB` DATE NULL,
`gender` ENUM('M','F','Other') NULL,
`featuredProfile` ENUM('Y','N') NULL DEFAULT 'N',
`email` VARCHAR(100) NULL,
`phone` VARCHAR(50) NULL,
`summary` VARCHAR(500) NULL,
`profilePic` VARCHAR(32) NULL,
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
PRIMARY KEY (`id`),
INDEX `fkProfilesUserID_idx` (`userID` ASC),
CONSTRAINT `fkProfilesUserID`
FOREIGN KEY (`userID`)
REFERENCES `amarjobs`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE CASCADE)
ENGINE = InnoDB;
有些table导入了,为什么profiles
table没有导入?你能告诉我问题出在哪里吗?
假设您正在从其他服务器导入数据。所以不应该有与外键创建相关的问题...
首先导入它的 parent table users
table 然后你可以导入这个 table。这是干净的方式。
否则你可以在设置foreign_key_checks禁用后强制导入。但是你不应该这样做并使用干净的方式。
更新:
您可以通过此查询获取所有相关的 table:
SELECT table_name AS 'My_Table',REFERENCED_TABLE_NAME AS 'Parent_Table' FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA ='pass_your_db_here' AND table_name in ('table1','table2',.....'tablen') AND REFERENCED_TABLE_NAME IS NOT NULL;
以上查询将为 parent_table 列中的所有 table 提供所有 parents tables,因此从 my_table & parent_table 从源服务器列出并备份这些 table 并在目标服务器上恢复。
您应该将 (id) 作为 amarjobs
.users
table.