错误1075表定义不正确;只能有一个自动列,必须将其定义为键

时间:2017-01-16 17:43:12

标签: mysql sql

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

下表(tb_core_process_customer_data)将被其他表用于捕获公共和主要客户数据。要使这三个验证密钥成为必要:cpf_cnpjid_quotationseq_quotation,这些密钥对于此数据库中的整个表是通用的。

tb_core_process_customer_data查询:

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查询:

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

1 个答案:

答案 0 :(得分:1)

MySQL使用auto_increment字段上的键来更快地查找。您将auto_increment字段作为第2个字段放在pk中,因此MySQL不能单独使用pk来检查自动增量的值,因此会显示错误消息。

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

  1. seq_quotation字段上添加单独的密钥(不必是唯一的或pk)。

  2. 无论如何,自动增量值都是唯一的,因此您可以将其作为pk单独使用,并在其他2个字段上添加另一个索引。使用唯一索引或pk中的auto_increment打包其他字段是没有意义的 - 除非您使用MySQL。 (见下面的注释)

  3. 我不确定它是否有效,但您可能会尝试将seq_quotation移至当前PK中的第一个字段。

  4. 请注意

    如果你打算使用自动增量来增加每组的数量,那么

    1. 确保使用myisam或bdb表格类型
    2. 或者如果innodb不使用auto_increment,请改用触发器(参见this question on SO for details