Что не так с моим SQL здесь? # 1089 - Неправильный префиксный ключ
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;
Я получаю ошибку #1089 - Incorrect prefix key
и не могу понять, что я делаю неправильно. Помогите, пожалуйста!
Ответы
Ответ 1
В определении PRIMARY KEY вы использовали (id(11))
, который определяет префиксный ключ - то есть первые 11 символов должны использоваться только для создания индекса. Префиксные ключи действительны только для типов CHAR
, VARCHAR
, BINARY
и VARBINARY
, а поле id
- int
, следовательно, ошибка.
Используйте PRIMARY KEY (id)
, и все будет в порядке.
Ссылка MySQL здесь и прочитайте из параграфа 4.
Ответ 2
Если вы используете графический интерфейс, и вы по-прежнему получаете ту же проблему. Просто оставьте значение размера пустым, первичный ключ по умолчанию имеет значение 11, с этим вы должны быть в порядке. Работал с Bitnami phpmyadmin.
Ответ 3
Это
ПЕРВИЧНЫЙ КЛЮЧ (id
(11))
автоматически генерируется phpmyadmin, изменяется на
ПЕРВИЧНЫЙ КЛЮЧ (id
)
.
Ответ 4
Существует простой способ сделать это. Это может быть не экспертный ответ, и он может работать не для всех, но для меня это было.
Снимите флажки всех основных и уникальных флажков, создайте простую таблицу.
Когда phpmyadmin (или другое) показывает структуру таблицы, сделайте столбец основной данной кнопкой.
Затем нажмите изменить и отредактируйте настройки тех или иных колонок, таких как "уникальный" и т.д.
Ответ 5
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;
Изменить на
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;
Ответ 6
Это работает для меня:
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;
Ответ 7
Проблема для меня в phpMyAdmin. Я просто создал таблицу без const.
Позже я изменил идентификатор на главный ключ. Затем я изменил идентификатор на Auto-inc.
Это решило проблему.
ALTER TABLE `users` CHANGE `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT;
Ответ 8
Когда вы указываете id в качестве первичного ключа, появляется всплывающее окно, и они спрашивают вас, сколько размеров этого первичного ключа.
Таким образом, вы просто оставляете пустым, потому что по умолчанию установлено значение int. 11. Нажмите "ОК" на всплывающих окнах без ввода числа.
в этом типе ошибок вы никогда не столкнетесь в будущем.
Спасибо, 😊
Ответ 9
в соответствии с последней версией MySQL (phpMyAdmin), добавьте правильный ИНДЕКС при выборе первичного ключа. например: id [int] INDEX 0, если id - ваш первичный ключ и первый индекс.
Или
Для вашей проблемы попробуйте этот
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;
Ответ 10
У меня также была такая же проблема.
Решение для меня:
CREATE TABLE IF NOT EXISTS 'users' (
'sr_no' 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 ;
Я вставляю этот код в SQL и запускаю, он отлично работает.
Ответ 11
В моем случае я столкнулся с проблемой при создании таблицы из phpmyadmin. Для столбца id я выбираю основной вариант из раскрывающегося списка индекса и заполняю размер 10.
Если вы используете phpmyadmin, для решения этой проблемы снова измените параметр раскрывающегося списка индекса, после повторного выбора первичного параметра он попросит вас об этом, оставьте его пустым, и все готово.