这里的SQL有什么问题? #1089 - 前缀键不正确

时间:2015-03-08 21:47:00

标签: mysql sql

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错误,无法弄清楚我做错了什么。求救!

14 个答案:

答案 0 :(得分:88)

在PRIMARY KEY定义中,您使用了(id(11)),它定义了前缀键 - 即前11个字符只应用于创建索引。前缀密钥仅对CHARVARCHARBINARYVARBINARY类型有效,而您的id字段为int,因此会出错。

请改用PRIMARY KEY (id),你应该没问题。

MySQL参考here,并阅读第4段。

答案 1 :(得分:19)

如果您使用的是GUI,但仍然遇到同样的问题。只要将大小值保留为空,主键默认值为11,您应该没问题。与Bitnami phpmyadmin合作。

答案 2 :(得分:9)

这个

  

PRIMARY KEY(id(11))

由phpmyadmin自动生成,更改为

  

PRIMARY KEY(id

答案 3 :(得分:4)

有一种简单的方法。这可能不是专家的答案,它可能对每个人都不起作用,但它对我有用。

取消选中所有主要和唯一复选框,jut创建一个简单的简单表格。

当phpmyadmin(或其他)向您显示表格结构时,请按给定按钮创建主要列。

然后点击更改,然后修改该字符串或其他列的设置,例如' unique'等。

答案 4 :(得分: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;

更改为

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;

答案 5 :(得分:2)

它对我有用:

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;       

答案 6 :(得分:2)

问题在phpMyAdmin中对我来说是一样的。我刚刚创建了一个没有任何const的表。 后来我将ID修改为主键。然后我将ID更改为Auto-inc。 这解决了这个问题。

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

答案 7 :(得分:2)

当你将id作为主键时,会弹出一个弹出窗口,然后会询问你这个主键的大小。 因此,您只需保留空白,因为默认情况下设置了int值11.单击然后确定弹出的那些没有任何输入数字。 在这种类型的错误中,你将来永远不会面对。 谢谢

答案 8 :(得分:1)

就我而言,从phpmyadmin创建表时遇到了问题。对于id列,我从索引下拉列表中选择主要选项,并填充了大小10。

如果您使用的是phpmyadmin,要解决此问题,请再次更改index下拉选项,然后再次重新选择主选项,它将询问您大小,将其留空即可。

答案 9 :(得分:1)

此处是逐步的完整解决方案

  • 首先,您必须通过插入所有数据来制作表。 id应该打勾。
  • 然后按go并弹出#1089错误

这是解决方案

  • 在附近设置一个名为“预览SQL”的按钮
  • 单击该按钮并复制sql代码
  • 然后单击窗口顶部的SQL选项卡
  • 清除归档的文本并将粘贴的代码粘贴到此处。
  • 您将在代码底部看到(id (11))
  • (id (11))替换为(id)
  • 然后单击转到

现在繁荣起来,一切都会好起来

答案 10 :(得分:0)

根据最新版本的MySQL(phpMyAdmin),在选择主键时添加正确的INDEX。例如: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;

答案 11 :(得分:0)

我也有同样的问题。
解决方案适用于我:

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中粘贴此代码并运行,它运行正常。

答案 12 :(得分:0)

在PHPMyAdmin中,在弹出窗口中忽略大小值/将其保留为空。

答案 13 :(得分:0)

这对我有用:

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`(id))
) ENGINE = MyISAM;

不需要放 id(11) 因为默认情况下它等于 11 所以你离开 将其设为 id,在 phpmyadmin 中将其留空。