【问题标题】:Can't create an auto_increment primary key, when there is a foreign key which is auto_inc in origin无法创建 auto_increment 主键,当有一个外键是 auto_inc 时
【发布时间】:2013-04-23 09:32:54
【问题描述】:

我有 2 张桌子:

  1. 事件:

    CREATE TABLE incidencies
      (
         id_inc     INT(7) ZEROFILL NOT NULL auto_increment PRIMARY KEY,
         empresa    VARCHAR(40),
         maquina    VARCHAR(20),
         tipus_inc  VARCHAR(20),
         estat_mon  VARCHAR(20),
         estat_inc  VARCHAR(20),
         dia_inc    DATE,
         hora_inc   TIME,
         descripcio VARCHAR(200)
      )
    CHARACTER SET utf8
    engine=innodb;
    
  2. 评论:

    CREATE TABLE comentaris
      (
         id_inc    INT(7) ZEROFILL NOT NULL,
         id_com    INT(3) ZEROFILL NOT NULL auto_increment,
         data_com  DATE,
         hora_com  TIME,
         comentari VARCHAR(999),
         PRIMARY KEY(id_inc, id_com),
         FOREIGN KEY (id_inc) REFERENCES incidencies (id_inc) ON DELETE CASCADE ON
         UPDATE CASCADE
      )
    CHARACTER SET utf8
    engine=innodb; 
    

如您所见,在 COMENTARIS 表上,ID_INC 是一个外键,其起源是 auto_incremental,但在 COMENTARIS 上不再存在。

现在我确实想将字段 ID_COM 设为 auto_incremental,并将它们设为主键。

表格应如下所示:

ID_INC | ID_COM 001 | 001 001 | 002 001 | 003 002 | 004 003 | 005

问题在于,似乎 MySQL 将 ID_INC 检测为 auto_incremental 字段,而 COMENTARIS 表上 不再

当我尝试使 ID_COM auto_incremental 时,我收到以下错误消息:

ERROR 1075 (42000):表定义不正确;只能有一个自动列,并且必须定义为一个键

数据库需要是InnoDB引擎。

有什么办法吗?

【问题讨论】:

  • 如果ID_INCCOMENTARIS 中的外键,那么它在该表中是AUTO_INCREMENT(甚至是主键)没有任何意义。听起来您需要了解主键和外键实际上是什么。

标签: mysql foreign-keys


【解决方案1】:

该问题与外键无关。如果这是您运行的所有代码:

CREATE TABLE comentaris
(
    id_inc    INT(7) ZEROFILL NOT NULL,
    id_com    INT(3) ZEROFILL NOT NULL auto_increment,
    PRIMARY KEY(id_inc, id_com)
)
engine=innodb; 

...你仍然会遇到同样的错误。

为了能够在id_com 上使用AUTO_INCREMENT,您需要有一个密钥,其中id_com 是第一项或唯一一项。到目前为止,您只有 id_comsecond 项的主键——这还不够,因为 MySQL 不能为此目的使用该索引。

我的印象是你有一个错字,你真的想要这个:

CREATE TABLE comentaris
(
    id_inc    INT(7) ZEROFILL NOT NULL,
    id_com    INT(3) ZEROFILL NOT NULL auto_increment,
    PRIMARY KEY(id_com)
)
engine=innodb; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2021-06-13
    • 2013-09-09
    • 2010-11-26
    相关资源
    最近更新 更多