Database problemen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nadine Peeters

Nadine Peeters

16/10/2020 12:54:44
Quote Anchor link
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
 
PHP hulp

PHP hulp

28/10/2020 07:11:01
 
Ivo P

Ivo P

16/10/2020 13:12:52
Quote Anchor link
sitemap_id is een unsigned int(11).
kennelijk is de kolom id in de tabel t5s10_osmap_sitemaps _niet_ een unsigned int(11)
 
Nadine Peeters

Nadine Peeters

16/10/2020 13:19:16
Quote Anchor link
Bedankt voor je antwoord maar kan ik dit oplossen?
 
- Ariën -
Beheerder

- Ariën -

16/10/2020 14:38:31
Quote Anchor link
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?
Gewijzigd op 16/10/2020 15:05:00 door - Ariën -
 
Nadine Peeters

Nadine Peeters

16/10/2020 16:42:32
Quote Anchor link
Hoi,
het sql bestand is blijkbaar te groot om te importeren via phpmyadmin.
Ik krijg telkens een foutmelding.

groetjes,
Nadine
 
- Ariën -
Beheerder

- Ariën -

16/10/2020 16:57:54
Quote Anchor link
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?
 
Nadine Peeters

Nadine Peeters

16/10/2020 17:33:29
Quote Anchor link
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 */;
 
- Ariën -
Beheerder

- Ariën -

16/10/2020 17:59:06
Quote Anchor link
De velden lijken te kloppen
Ik zie het niet in de query maar misschien komen de collaties niet overeen?
 
Ivo P

Ivo P

17/10/2020 13:30:58
Quote Anchor link
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)
 
Ad Fundum

Ad Fundum

21/10/2020 14:00:48
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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/
Gewijzigd op 21/10/2020 14:02:00 door Ad Fundum
 
Ivo P

Ivo P

21/10/2020 16:09:00
Quote Anchor link
met de Foreign_key_checks setting kun je de foutmelding
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  -- 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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
(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.
 
Thomas van den Heuvel

Thomas van den Heuvel

21/10/2020 18:15:02
Quote Anchor link
Waarschijnlijk is het gewoon een kwestie van de tabellen in de goede volgorde aanmaken.

Het is zaak dat de t5s10_osmap_sitemaps tabel bestaat voordat je de t5s10_osmap_sitemap_menus tabel (die aan de eerstgenoemde tabel refereert) aanmaakt.

Wat je ook kunt doen, zoals @AdFundum voorstelt, is tijdelijk de foreign key checks uitzetten zodat MySQL hier niet over struikelt.

Ik weet verder niet hoe "BigDump(er)" precies werkt? Hoe groot is de database/het importbestand precies?
 
Ad Fundum

Ad Fundum

21/10/2020 20:17:58
Quote Anchor link
Nadine Peeters heeft het al bijna goed in de reactie van 16/10/2020 17:33:29.
Met een kleine aanpassing (CREATE TABLE) erbij werkt het prima.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE TABLE `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;

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;
 
Thomas van den Heuvel

Thomas van den Heuvel

21/10/2020 21:48:23
Quote Anchor link
Ben niet helemaal zeker over die AUTO_INCREMENT=2 though.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.