Maison  >  Article  >  base de données  >  Pourquoi est-ce que j'obtiens le code d'erreur MySQL n° 1089 « Clé de préfixe incorrecte » ?

Pourquoi est-ce que j'obtiens le code d'erreur MySQL n° 1089 « Clé de préfixe incorrecte » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 07:35:30272parcourir

Why Am I Getting MySQL Error Code #1089

Comprendre le code d'erreur MySQL n°1089

Le code d'erreur MySQL n°1089, "Clé de préfixe incorrecte", indique un problème avec une clé primaire ou un index unique. Cela se produit spécifiquement lorsque la partie clé utilisée n'est pas une chaîne ou lorsque la longueur de la partie clé utilisée dépasse la longueur réelle de la partie clé.

Dans la requête SQL fournie :

CREATE TABLE `movies`.`movie` (
  `movie_id` INT(3) NULL AUTO_INCREMENT,
  `movie_name` VARCHAR(25) NULL,
  `movie_embedded_id` VARCHAR(50) NULL,
  `rating_no` INT(3) NULL,
  `movie_description` VARCHAR(50) NULL,
  PRIMARY KEY (`movie_id`(3))
) ENGINE = InnoDB;

Le le problème provient de l'utilisation de PRIMARY KEY (movie_id(3)). Cette ligne crée une clé primaire sur les trois premiers octets de la colonne movie_id, qui est spécifiée par le segment (3).

Cependant, tenter de créer un préfixe sur un type de données numérique (INT dans ce cas) n'est pas pris en charge par MySQL. En effet, les clés de préfixe ne s'appliquent qu'aux types de données basés sur des chaînes.

Pour résoudre l'erreur, vous devez utiliser la requête suivante :

CREATE TABLE `movies`.`movie` (
  `movie_id` INT(3) NULL AUTO_INCREMENT,
  `movie_name` VARCHAR(25) NULL,
  `movie_embedded_id` VARCHAR(50) NULL,
  `rating_no` INT(3) NULL,
  `movie_description` VARCHAR(50) NULL,
  PRIMARY KEY (`movie_id`)
) ENGINE = InnoDB;

En supprimant le segment (3), la clé primaire est créée sur toute la colonne movie_id et non uniquement sur son préfixe. Cela résout le problème et permet à MySQL de créer correctement la clé primaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn