Goedemiddag, net nieuw hier. ik hoop dat iemand mij kan helpen. Ik probeer mijn databast terug te zetten met behulp van Bigdumper maar ik krijg deze foutmelding:

Query: CREATE TABLE `t5s10_osmap_sitemap_menus` (
`sitemap_id` int(11) unsigned NOT NULL,
`menutype_id` int(11) NOT NULL,
`changefreq` enum('always','hourly','daily','weekly','monthly','yearly','never') NOT NULL DEFAULT 'weekly',
`priority` float NOT NULL DEFAULT '0.5',
`ordering` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`sitemap_id`,`menutype_id`),
KEY `idx_ordering` (`sitemap_id`,`ordering`),
KEY `idx_sitemap_menus` (`sitemap_id`),
CONSTRAINT `fk_sitemaps_menus` FOREIGN KEY (`sitemap_id`) REFERENCES `t5s10_osmap_sitemaps` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

MySQL: Can't create table `nadine_united`.`t5s10_osmap_sitemap_menus` (errno: 150 "Foreign key constraint is incorrectly formed")


Groetjes, Nadine
sitemap_id is een unsigned int(11).
kennelijk is de kolom id in de tabel t5s10_osmap_sitemaps _niet_ een unsigned int(11)
Bedankt voor je antwoord maar kan ik dit oplossen?
In phpMyAdmin kan je eenvoudig de structuur en eigenschappen van je database, tabellen en velden aanpassen. En anders moet je de query even op de juiste manier ombouwen, zodat je die weer aan MySQL kan voeren.

Is 'bigdumper' de enige manier? Zijn er geen manieren via phpMyAdmin of via een Hosting control panel (zoals DirectAdmin?), of anderzijds misschien via SSH als je daar ervaring genoeg voor hebt?
Hoi,
het sql bestand is blijkbaar te groot om te importeren via phpmyadmin.
Ik krijg telkens een foutmelding.

groetjes,
Nadine
Maar het probleem zit dus in de instellingen van veld 'id' in tabel: t5s10_osmap_sitemaps
Die komt niet overeen met zijn tegenoverliggende veld in 't5s10_osmap_sitemap_menus'

Hoe staan die instellingen?
Bedoelt u dit?

`t5s10_osmap_sitemaps` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`params` text,
`is_default` tinyint(1) NOT NULL DEFAULT '0',
`published` tinyint(1) NOT NULL DEFAULT '1',
`created_on` datetime DEFAULT NULL,
`links_count` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `default_idx` (`is_default`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;



`t5s10_osmap_sitemap_menus` (
`sitemap_id` int(11) unsigned NOT NULL,
`menutype_id` int(11) NOT NULL,
`changefreq` enum('always','hourly','daily','weekly','monthly','yearly','never') NOT NULL DEFAULT 'weekly',
`priority` float NOT NULL DEFAULT '0.5',
`ordering` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`sitemap_id`,`menutype_id`),
KEY `idx_ordering` (`sitemap_id`,`ordering`),
KEY `idx_sitemap_menus` (`sitemap_id`),
CONSTRAINT `fk_sitemaps_menus` FOREIGN KEY (`sitemap_id`) REFERENCES `t5s10_osmap_sitemaps` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
De velden lijken te kloppen
Ik zie het niet in de query maar misschien komen de collaties niet overeen?
en op het moment dat je t5s10_osmap_sitemap_menus aanmaakt, bestaat t5s10_osmap_sitemaps al wel?

(al zou ik dan meer een melding in de trand van "tabel t5s10_osmap_sitemaps not found" verwachten)
MySQL controleert de relaties tussen gegevens al bij het importeren, maar de foutmelding voorkomt dat je de gegevens kunt importeren. Wat je wilt is de gegevens überhaupt eerst importeren, om daarna de relaties te corrigeren.

Je kunt aan MySQL vragen om de relaties tussen gegevens in verschillende tabelkolommen tijdelijk niet te bewaken, zodat je de gegevens in ieder geval kunt importeren.

Wil je dat alleen voor de huidige sessie doen, dan kan je dit MySQL-commando gebruiken:
SET FOREIGN_KEY_CHECKS=0;


Wil je dat voor heel de MySQL database doen, bijvoorbeeld in een aparte sessie via phpMyAdmin, dan kan je deze gebruiken:
SET GLOBAL FOREIGN_KEY_CHECKS=0;


Na het corrigeren van de gegevens kan je de controle weer aanzetten met de waarde 1.

Voor meer info zie:
- MySQL: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_foreign_key_checks
- MariaDB: https://mariadb.com/docs/reference/mdb/system-variables/foreign_key_checks/

met de Foreign_key_checks setting kun je de foutmelding

  -- ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails


voorkomen, bij een import waarbij je de volgorde van invoeren niet eenvoudig kunt regelen. (je wilt bijvoorbeeld eerst de eigenschappen van een product inserten en pas daarna het product zelf. Dus eerst het je een berg eigenschappen die nog naar een niet-bestaand product wijzen)

Maar TS heeft een probleem om de de FK relatie te leggen tussen 2 tabellen.


(errno: 150 "Foreign key constraint is incorrectly formed")


Dat komt vaker voor als je bijvoorbeeld in de ene tabel een id-kolom hebt van het type INT(11)
en in de andere tabel de verwijzing naar die tabel/kolom doet in een kolom van een ander type.

Bijvoorbeeld in een kolom van het type DATE.
Nu ligt het er met DATE erg dik bovenop dat het een ander type is, maar ook een DECIMAL, TINYINT of BIGINT leidt tot deze foutmelding.

Maar in de aanwijzingen van TS komt not niet echt naar voren waar de schoen hier wringt:
in beide tabellen lijkt het een INT(11) UNSIGNED te zijn.

Reageren