Bonjour,

J'utilise MySQL Workbench et lorsque j'exécute mes instructions DDL j'obtiens l'erreur suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
#1005 - Can't create table './products.frm' (errno: 121)
Ci-dessous une description de mes tables (categories, sections, products) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
CREATE  TABLE IF NOT EXISTS `categories` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(80) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE  TABLE IF NOT EXISTS `sections` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `category_id` INT UNSIGNED NOT NULL ,
  `name` VARCHAR(80) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_categories` (`category_id` ASC) ,
  CONSTRAINT `fk_categories`
    FOREIGN KEY (`category_id` )
    REFERENCES `categories` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
CREATE  TABLE IF NOT EXISTS `products` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `category_id` INT UNSIGNED NOT NULL ,
  `section_id` INT UNSIGNED NOT NULL ,
  `created_at` DATETIME NOT NULL ,
  `label` VARCHAR(100) NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_categories` (`category_id` ASC) ,
  INDEX `fk_sections` (`section_id` ASC) ,
  CONSTRAINT `fk_categories`
    FOREIGN KEY (`category_id` )
    REFERENCES `categories` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_sections`
    FOREIGN KEY (`section_id` )
    REFERENCES `sections` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
J'ai parcouru plusieurs forums et ce problème survient généralement lorsque le type de la clé de référence et celui de la clé étrangère sont différents. Malheureusement pour moi, il ne s'agit pas de ça. J'ai peut être mal organisé/conçu mes tables.

Quelqu'un a-t-il déjà eu ce problème ou dans le meilleur des cas sait comment le résoudre ?

D'avance merci pour votre aide,

Yvan