首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误1075表定义不正确;只能有一个auto列,并且必须将其定义为键

错误1075表定义不正确;只能有一个auto列,并且必须将其定义为键
EN

Stack Overflow用户
提问于 2017-01-17 01:43:12
回答 1查看 9.6K关注 0票数 3

我正在创建表之间的关系,这是自动递增两列id_quotationseq_quotation所必需的。我正在引用另一个表(tb_core_process_id_quotation)中的列id_quotation,在这个表中我已经递增了它。

下面的表格(tb_core_process_customer_data)将被其他表格用来捕获公共数据和主要客户数据。为此,有必要使用这三个验证键:cpf_cnpjid_quotationseq_quotation,这三个验证键对此数据库中的整个表都是通用的。

tb_core_process_customer_data查询:

代码语言:javascript
复制
CREATE TABLE tb_core_process_customer_data(
cpf_cnpj VARCHAR(255) NOT NULL,
id_quotation INT NOT NULL,
seq_quotation INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255),
dt_birth DATE,
cd_insurance_type INT,
PRIMARY KEY (cpf_cnpj, seq_quotation, id_quotation),
FOREIGN KEY (cd_insurance_type) REFERENCES tb_nm_insurance_type(cd_insurance_type),
FOREIGN KEY (id_quotation) REFERENCES tb_core_process_id_quotation(id_quotation)
);

tb_core_process_id_quotation查询:

代码语言:javascript
复制
CREATE TABLE tb_core_process_id_quotation(
id_quotation INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id_quotation)
);

因此,我很难将这三个键联系起来并进行验证。当我尝试创建tb_core_process_customer_data时,下面的消息向我展示了一下:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 02:06:32

MySQL使用auto_increment字段上的键来加快查找速度。您将auto_increment字段作为pk中的第二个字段,因此MySQL不能单独使用pk来检查自动增量的值,因此出现错误消息。

有许多方法可以解决这个问题。

  1. seq_quotation字段上添加一个单独的键(不需要唯一或主键)。
  2. 自动增量值无论如何都会是唯一的,因此您可以将其单独作为主键,并在其他两个字段上添加另一个索引。除非您使用MySQL,否则在唯一索引或pk中使用auto_increment打包其他字段是没有意义的。(参见下面的注释)
  3. 我不确定它是否有效,但您可以尝试将seq_quotation移到当前主键中的第一个字段。

备注

如果您的意图是使用自动递增使每个组有一个递增的数字,那么

  1. 确保您使用myisam或bdb表类型,
  2. ;如果是innodb,请改用触发器(参见myisam或bdb
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41682103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档