2015-03-08 11 views
42
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; 

Otrzymuję błąd #1089 - Incorrect prefix key i nie mogę ustalić, co robię źle. Prosimy o pomoc!Co jest nie tak z moim SQL? # 1089 - Niepoprawny klucz prefiksu

+6

Usuń "(11)" z deklaracji klucza głównego - powinieneś po prostu użyć tej kolumny, w tym przypadku 'id' ... http://www.sqlfiddle.com/#!9/ 30aa3/1 – sgeddes

+0

Co to jest "id (11)"? –

+4

jeśli używasz PHPMyAdmin, pozostaw wartość rozmiaru pustą w wyskakującym oknie. – dangel

Odpowiedz

67

W definicji PRIMARY KEY użyłeś (id(11)), który definiuje klucz prefiksu - tzn. Do utworzenia indeksu należy użyć tylko pierwszych 11 znaków. Klucze prefiksu są ważne tylko dla typów CHAR, VARCHAR, i VARBINARY, a twoje pole id to int, stąd błąd.

Zamiast tego należy użyć PRIMARY KEY (id) i powinno być dobrze.

MySQL odniesienia here i czytać z ust 4.

3

Istnieje prosty sposób to zrobić. To może nie być odpowiedź ekspertów i może nie działać dla wszystkich, ale dla mnie.

Odznacz wszystkie pierwotne i unikatowe pola wyboru, a następnie utwórz zwykły prosty stół.

Gdy phpmyadmin (lub inny) pokazuje strukturę tabeli, ustaw kolumnę podstawową przez dany przycisk.

Następnie kliknij zmiany i edytować ustawienia tego lub innych colums jak „wyjątkowy” itd

1

To działa dla mnie:

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;  
+8

Nie jest dobrą praktyką, aby po prostu pisać odpowiedź kodu bez wyjaśnienia! – Samer

0

zgodnie z najnowszą wersją MySQL (phpMyAdmin), dodaj prawidłowy INDEKS podczas wybierania klucza podstawowego. na przykład: id [int] INDEX 0, jeśli id ​​jest twoim kluczem podstawowym i na pierwszym indeksie. Albo


Dla Twojego problemu próbować ten jeden

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

Może przydać się tutaj informacja o aktualnej wersji? – Martin

11

Jeśli używasz GUI i nadal otrzymuję ten sam problem. Po prostu pozostaw wartość rozmiaru pustego, klucz podstawowy domyślnie przyjmuje wartość 11, powinieneś z tym się pogodzić. Pracował z Bitnami phpmyadmin.

+1

Nie "klucz podstawowy", ale "INT SIGNED" ma domyślny rozmiar "(11)". –

8

to

klucz podstawowy (id (11))

jest generowany automatycznie phpMyAdminie, zmiana

klucz podstawowy (id)

.

0

Też miałem ten sam problem.
praca rozwiązanie dla mnie:

 
CREATE TABLE IF NOT EXISTS `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 (`sr_no`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

wkleić ten kod w SQL i uruchomić, to działa dobrze.

+5

co to jest 'sr_no' ?? –

4
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; 

Zmień Do

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; 
2

Problem jest taki sam dla mnie w phpMyAdmin. Właśnie utworzyłem tabelę bez żadnej stałej. Później zmodyfikowałem identyfikator na klucz podstawowy. Następnie zmieniłem identyfikator na Auto-inc. To rozwiązało problem.

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

Kiedy dajesz id jako klucza podstawowego następnie pop-up jest przyjść i ci aske do ilu rozmiar tego klucza podstawowego. Po prostu pozostaw puste, ponieważ domyślnie ustawiona jest wartość int 11. Kliknij, a następnie ok na tych wyskakujących bez wpisywania numeru. w tego typu błędach nigdy nie napotkasz w przyszłości. Dziękujemy