2017-05-30 2 views
1

J'essaie de migrer mon installation osclass vers un autre serveur. J'ai copié tous les fichiers et créé une nouvelle base de données. Lorsque j'essaie d'importer ma base de données à partir de la sauvegarde, j'obtiens "# 1215 - Impossible d'ajouter une contrainte de clé étrangère".# 1215 - Impossible d'ajouter une contrainte de clé étrangère

Il montre que ce bit est un problème:

-- 
    -- Table structure for table `oc_t_user` 
    -- 

    CREATE TABLE IF NOT EXISTS `oc_t_user` (
     `pk_i_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
     `dt_reg_date` datetime NOT NULL, 
     `dt_mod_date` datetime DEFAULT NULL, 
     `s_name` varchar(100) NOT NULL, 
     `s_username` varchar(100) NOT NULL, 
     `s_password` char(60) NOT NULL, 
     `s_secret` varchar(40) DEFAULT NULL, 
     `s_email` varchar(100) NOT NULL, 
     `s_website` varchar(100) DEFAULT NULL, 
     `s_phone_land` varchar(45) DEFAULT NULL, 
     `s_phone_mobile` varchar(45) DEFAULT NULL, 
     `b_enabled` tinyint(1) NOT NULL DEFAULT '1', 
     `b_active` tinyint(1) NOT NULL DEFAULT '0', 
     `s_pass_code` varchar(100) DEFAULT NULL, 
     `s_pass_date` datetime DEFAULT NULL, 
     `s_pass_ip` varchar(15) DEFAULT NULL, 
     `fk_c_country_code` char(2) DEFAULT NULL, 
     `s_country` varchar(40) DEFAULT NULL, 
     `s_address` varchar(100) DEFAULT NULL, 
     `s_zip` varchar(15) DEFAULT NULL, 
     `fk_i_region_id` int(10) unsigned DEFAULT NULL, 
     `s_region` varchar(100) DEFAULT NULL, 
     `fk_i_city_id` int(10) unsigned DEFAULT NULL, 
     `s_city` varchar(100) DEFAULT NULL, 
     `fk_i_city_area_id` int(10) unsigned DEFAULT NULL, 
     `s_city_area` varchar(200) DEFAULT NULL, 
     `d_coord_lat` decimal(10,6) DEFAULT NULL, 
     `d_coord_long` decimal(10,6) DEFAULT NULL, 
     `b_company` tinyint(1) NOT NULL DEFAULT '0', 
     `i_items` int(10) unsigned DEFAULT '0', 
     `i_comments` int(10) unsigned DEFAULT '0', 
     `dt_access_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
     `s_access_ip` varchar(15) NOT NULL DEFAULT '', 
     PRIMARY KEY (`pk_i_id`), 
     UNIQUE KEY `s_email` (`s_email`), 
     KEY `idx_s_name` (`s_name`(6)), 
     KEY `idx_s_username` (`s_username`), 
     KEY `fk_c_country_code` (`fk_c_country_code`), 
     KEY `fk_i_region_id` (`fk_i_region_id`), 
     KEY `fk_i_city_id` (`fk_i_city_id`), 
     KEY `fk_i_city_area_id` (`fk_i_city_area_id`), 
     CONSTRAINT `oc_t_user_ibfk_1` FOREIGN KEY (`fk_c_country_code`)   REFERENCES `oc_t_country` (`pk_c_code`), 
     CONSTRAINT `oc_t_user_ibfk_2` FOREIGN KEY (`fk_i_region_id`) REFERENCES `oc_t_region` (`pk_i_id`), 
     CONSTRAINT `oc_t_user_ibfk_3` FOREIGN KEY (`fk_i_city_id`) REFERENCES `oc_t_city` (`pk_i_id`), 
     CONSTRAINT `oc_t_user_ibfk_4` FOREIGN KEY (`fk_i_city_area_id`) REFERENCES `oc_t_city_area` (`pk_i_id`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; 

S'il vous plaît aider.

+0

font les 4 tables en bas à laquelle il est existe une clé étrangère? Si oui, est-ce que tous les oc_t_user_ibfk _ # dans oc_t_user existent dans la table parente? Je suppose que vous pourriez avoir des problèmes de qualité des données. en ce que l'un des 4 champs n'a pas d'enregistrement dans la table parente, ou les tables parentes n'ont pas été créées lors de la création de cette table. sont les clés référencées du même type de données? https://stackoverflow.com/questions/16969060/mysql-error-1215-cannot-add-forekey-key-contraint. Vous ne pouvez pas importer cette table tant que ceux sur lesquels elle dépend n'ont pas été créés! – xQbert

Répondre

0

Vous devez d'abord créer les tables que vous voulez référencer, par exemple, voici une clé qui référence une table, le type de la clé doit correspondre, suivez cet exemple et ajoutez le reste de vos tables, je vais montrer un exemple minimum qui travaille dans la création des tables, vous devez ajouter les données correctes bien sûr:

CREATE TABLE IF NOT EXISTS `oc_t_country` (
    `pk_c_code` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`pk_c_code`) 
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `oc_t_region` (
    `pk_i_id_region` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`pk_i_id_region`) 
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `oc_t_city` (
    `pk_i_id_city` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`pk_i_id_city`) 
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `oc_t_city_area` (
    `pk_i_id_area` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`pk_i_id_area`) 
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `oc_t_user` (
    `pk_i_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `dt_reg_date` datetime NOT NULL, 
    `dt_mod_date` datetime DEFAULT NULL, 
    `s_name` varchar(100) NOT NULL, 
    `s_username` varchar(100) NOT NULL, 
    `s_password` char(60) NOT NULL, 
    `s_secret` varchar(40) DEFAULT NULL, 
    `s_email` varchar(100) NOT NULL, 
    `s_website` varchar(100) DEFAULT NULL, 
    `s_phone_land` varchar(45) DEFAULT NULL, 
    `s_phone_mobile` varchar(45) DEFAULT NULL, 
    `b_enabled` tinyint(1) NOT NULL DEFAULT '1', 
    `b_active` tinyint(1) NOT NULL DEFAULT '0', 
    `s_pass_code` varchar(100) DEFAULT NULL, 
    `s_pass_date` datetime DEFAULT NULL, 
    `s_pass_ip` varchar(15) DEFAULT NULL, 
    `fk_c_country_code` int(10) unsigned DEFAULT NULL, 
    `s_country` varchar(40) DEFAULT NULL, 
    `s_address` varchar(100) DEFAULT NULL, 
    `s_zip` varchar(15) DEFAULT NULL, 
    `fk_i_region_id` int(10) unsigned DEFAULT NULL, 
    `s_region` varchar(100) DEFAULT NULL, 
    `fk_i_city_id` int(10) unsigned DEFAULT NULL, 
    `s_city` varchar(100) DEFAULT NULL, 
    `fk_i_city_area_id` int(10) unsigned DEFAULT NULL, 
    `s_city_area` varchar(200) DEFAULT NULL, 
    `d_coord_lat` decimal(10,6) DEFAULT NULL, 
    `d_coord_long` decimal(10,6) DEFAULT NULL, 
    `b_company` tinyint(1) NOT NULL DEFAULT '0', 
    `i_items` int(10) unsigned DEFAULT '0', 
    `i_comments` int(10) unsigned DEFAULT '0', 
    `dt_access_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `s_access_ip` varchar(15) NOT NULL DEFAULT '', 
    PRIMARY KEY (`pk_i_id`), 
    UNIQUE KEY `s_email` (`s_email`), 
    KEY `idx_s_name` (`s_name`(6)), 
    KEY `idx_s_username` (`s_username`), 
    KEY `fk_c_country_code` (`fk_c_country_code`), 
    KEY `fk_i_region_id` (`fk_i_region_id`), 
    KEY `fk_i_city_id` (`fk_i_city_id`), 
    KEY `fk_i_city_area_id` (`fk_i_city_area_id`), 
    CONSTRAINT `oc_t_user_ibfk_1` FOREIGN KEY (`fk_c_country_code`) REFERENCES `oc_t_country` (`pk_c_code`), 
    CONSTRAINT `oc_t_user_ibfk_2` FOREIGN KEY (`fk_i_region_id`) REFERENCES `oc_t_region` (`pk_i_id_region`), 
    CONSTRAINT `oc_t_user_ibfk_3` FOREIGN KEY (`fk_i_city_id`) REFERENCES `oc_t_city` (`pk_i_id_city`), 
    CONSTRAINT `oc_t_user_ibfk_4` FOREIGN KEY (`fk_i_city_area_id`) REFERENCES `oc_t_city_area` (`pk_i_id_area`) 
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; 
+0

Je reçois certaines erreurs lorsque j'exécute cette requête: Erreur Il semble y avoir une erreur dans votre requête SQL. La sortie d'erreur du serveur MySQL ci-dessous, s'il y en a, peut également vous aider à diagnostiquer le problème. ERREUR: Inconnu Ponctuation Chaîne @ 743 STR: // MySQL a déclaré: Documentation # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de // doit avoir le même type de l'autre table 's_country' varchar (40) DEFAULT 'à la ligne 18 – AlexRns

+0

@AlexRns rare, j'ai essayé et travaillé très bien, avez-vous effacé les commentaires? –

+0

Supprimer le // et mes commentaires, seulement écrire le sql –