我正在创建表之间的关系,这是自动递增两列id_quotation
和seq_quotation
所必需的。列id_quotation
,我正在引用另一个表(tb_core_process_id_quotation),我已在其中增加它。
下表(tb_core_process_customer_data)将被其他表用于捕获公共和主要客户数据。要使这三个验证密钥成为必要:cpf_cnpj
,id_quotation
和seq_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
答案 0 :(得分:1)
MySQL使用auto_increment字段上的键来更快地查找。您将auto_increment字段作为第2个字段放在pk中,因此MySQL不能单独使用pk来检查自动增量的值,因此会显示错误消息。
有许多方法可以解决这个问题。
在seq_quotation
字段上添加单独的密钥(不必是唯一的或pk)。
无论如何,自动增量值都是唯一的,因此您可以将其作为pk单独使用,并在其他2个字段上添加另一个索引。使用唯一索引或pk中的auto_increment打包其他字段是没有意义的 - 除非您使用MySQL。 (见下面的注释)
我不确定它是否有效,但您可能会尝试将seq_quotation
移至当前PK中的第一个字段。
请注意
如果你打算使用自动增量来增加每组的数量,那么