MySQL的前缀键不正确[重复]

Posted

技术标签:

【中文标题】MySQL的前缀键不正确[重复]【英文标题】:Incorrect prefix key MySQL [duplicate] 【发布时间】:2016-03-09 19:19:32 【问题描述】:

我在使用 phpmyadmin 创建表时遇到问题,这给了我以下错误:

#1089 - 不正确的前缀键;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀键

这是我做的查询:

CREATE TABLE `b2b`.`users` ( `id` BIGINT NOT NULL AUTO_INCREMENT ,
 `name` VARCHAR(30) NOT NULL ,
 `surnames` VARCHAR(80) NOT NULL ,
 `birthdate` DATE NOT NULL ,
 `drivingdoc` VARCHAR(20) NOT NULL ,
 `acdate` DATE NOT NULL ,
 `countrydoc` VARCHAR(20) NOT NULL ,
 `province` VARCHAR(20) NOT NULL ,
 `locality` VARCHAR(35) NOT NULL ,
 `address` VARCHAR(150) NOT NULL ,
 `number` VARCHAR(20) NOT NULL ,
 `flat` VARCHAR(20) NOT NULL ,
 `door` VARCHAR(20) NOT NULL ,
 `description` VARCHAR(2000) NOT NULL ,
 PRIMARY KEY (`id`(7))) ENGINE = InnoDB;

在 ubuntu 中使用 MariaDB。

【问题讨论】:

【参考方案1】:

问题是:

PRIMARY KEY (`id`(7))

你不能使用数字的部分作为键,你必须使用整个东西。此外,为数字类型指定长度充其量是无用的,最坏的情况是有害。

改为:

PRIMARY KEY (`id`)

【讨论】:

【参考方案2】:

我以前从未见过这种主键语法。试试这个:

CREATE TABLE `b2b`.`users` (
 `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   ....
) ENGINE = InnoDB;

如果你愿意的话

CREATE TABLE `b2b`.`users` (
 `id` BIGINT NOT NULL AUTO_INCREMENT,
   ....
 PRIMARY KEY (id) 
) ENGINE = InnoDB;

【讨论】:

【参考方案3】:

你的sql有几个错误,所以试着找出这个sql的不同之处

 CREATE TABLE  `b2b`.`users` ( `id` INT(7) NOT NULL AUTO_INCREMENT ,
 `name` VARCHAR(30) NOT NULL ,
 `surnames` VARCHAR(80) NOT NULL ,
 `birthdate` DATE NOT NULL ,
 `drivingdoc` VARCHAR(20) NOT NULL ,
 `acdate` DATE NOT NULL ,
 `countrydoc` VARCHAR(20) NOT NULL ,
 `province` VARCHAR(20) NOT NULL ,
 `locality` VARCHAR(35) NOT NULL ,
 `address` VARCHAR(150) NOT NULL ,
 `number` VARCHAR(20) NOT NULL ,
 `flat` VARCHAR(20) NOT NULL ,
 `door` VARCHAR(20) NOT NULL ,
 `description` VARCHAR(255) NOT NULL ,
 PRIMARY KEY (`id`)) ENGINE = InnoDB;

【讨论】:

(7) 在这种情况下也基本上没用。 '尝试找出差异'没有帮助。

以上是关于MySQL的前缀键不正确[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql 重复插入主键不报错方法

MYSQL语法不正确[重复]

MySQL使用Group Bu返回不正确的值[重复]

mysql主主同步两个数据库同时写入,实现原理:自动增长主键不重复

MySQL 高分 - 用户的个人排名:重复的条目导致不正确的值

MySQL Linux命令行工具和正确格式化的结果[重复]