web-dev-qa-db-fra.com

Quel est le problème avec mon code SQL ici? # 1089 - Clé de préfixe incorrecte

CREATE TABLE `table`.`users` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(50) NOT NULL,
    `password` VARCHAR(50) NOT NULL,
    `dir` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`id`(11))
) ENGINE = MyISAM;

Je reçois l'erreur #1089 - Incorrect prefix key et je ne peux pas comprendre ce que je fais mal. Aidez-moi, s'il vous plaît!

51
sandorfalot

Dans votre définition de PRIMARY KEY, vous avez utilisé (id(11)), qui définit un préfixe - c’est-à-dire les 11 premiers caractères uniquement doivent être utilisés pour créer un index. Les clés de préfixe ne sont valides que pour les types CHAR, VARCHAR, BINARY et VARBINARY et votre champ id est une int, d'où l'erreur.

Utilisez PRIMARY KEY (id) à la place et ça devrait aller.

Référence MySQL ici et lisez le paragraphe 4.

83
user1864610

Si vous utilisez une interface graphique et que vous rencontrez toujours le même problème. Laissez simplement la valeur de taille vide, la clé primaire par défaut la valeur 11, vous devriez vous en sortir. Travaillé avec Bitnami phpmyadmin.

17
Ralphkay

Ce 

CLÉ PRIMAIRE (id (11))

est généré automatiquement par phpmyadmin, passez à 

CLÉ PRIMAIRE (id)

.

Il y a un moyen simple de le faire. Ce n'est peut-être pas la réponse d'un expert et cela ne fonctionnera peut-être pas pour tout le monde, mais cela a fonctionné pour moi.

Décochez toutes les cases principales et uniques, créez un tableau simple et simple.

Quand phpmyadmin (ou autre) vous montre la structure du tableau, faites la colonne primaire avec le bouton donné. 

Cliquez ensuite sur change et modifiez les paramètres de cette colonne ou d’autres, comme "unique", etc. 

4
Robot Boy
CREATE TABLE `table`.`users` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(50) NOT NULL,
    `password` VARCHAR(50) NOT NULL,
    `dir` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`id`(11))
) ENGINE = MyISAM;

Changer en 

CREATE TABLE `table`.`users` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `username` VARCHAR(50) NOT NULL,
        `password` VARCHAR(50) NOT NULL,
        `dir` VARCHAR(100) NOT NULL,
        PRIMARY KEY (`id`)
    ) ENGINE = MyISAM;
4
Roshan Padole

Lorsque vous donnez id en tant que clé primaire, une fenêtre contextuelle apparaît et vous demande combien de taille de cette clé primaire ... sans aucun chiffre, entrez un numéro ... dans ce type d'erreur, vous ne serez jamais confronté à l'avenir ... Merci. 

2
hemant rao

Le problème est le même pour moi dans phpMyAdmin. Je viens de créer une table sans const. Plus tard, j'ai modifié l'ID en clé primaire. Puis j'ai changé l'ID en Auto-inc. Cela a résolu le problème. 

ALTER TABLE `users` CHANGE `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT;
2
Arindam

Ça marche pour moi:

CREATE TABLE `users`(
    `user_id` INT(10) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(255) NOT NULL,
    `password` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`user_id`)
) ENGINE = MyISAM;       
2
Issac Nguyen

Dans mon cas, j'ai fait face au problème lors de la création de la table à partir de phpmyadmin. Pour la colonne id, choisissez l’option principale dans la liste déroulante et remplissez la taille 10.

Si vous utilisez phpmyadmin, pour résoudre ce problème, modifiez à nouveau l'option de liste déroulante d'index. Après avoir resélectionné l'option principale, il vous demandera la taille, laissez le champ vide et vous avez terminé.

0
sh6210

J'ai aussi eu le même problème. 
Solution fonctionne pour moi:

 CREATE TABLE SI NON EXISTE `users` (
` Sr_no` int (11) NOT NULL AUTO_INCREMENT, 
 `Username` VARCHAR (50) NOT NULL, 
` Password` VARCHAR (50) NOT NULL, 
 `Dir` VARCHAR (100) NON NULL, 
 PRIMARY KEY (` sr_no`) 
) ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 3; 

Je colle ce code en SQL et le lance, il fonctionne bien.

0
sayali

selon la dernière version de MySQL (phpMyAdmin), ajoutez un INDEX correct lors du choix de la clé primaire. par exemple: id [int] INDEX 0, si id est votre clé primaire et au premier index. Ou,


Pour votre problème, essayez celui-ci

CREATE TABLE `table`.`users` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(50) NOT NULL,
    `password` VARCHAR(50) NOT NULL,
    `dir` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE = MyISAM;
0
Omar Faruk