【问题标题】:How to have an auto increment column in MySQL table without making it a primary key?如何在 MySQL 表中拥有一个自动递增列而不将其设为主键?
【发布时间】:2020-02-21 21:27:45
【问题描述】:

这是我的 SQL,用于创建具有各自主键和外键的 2 个表。问题是我想在我的子表中有一个自动增量列,但我想将其他一些列作为主键。我该如何解决这个问题?

CREATE TABLE patient (
_id INT(5) UNSIGNED AUTO_INCREMENT NOT NULL,
pn VARCHAR(11) DEFAULT NULL,
first VARCHAR(15) DEFAULT NULL,
last VARCHAR(25) DEFAULT NULL,
dob DATE DEFAULT NULL,
PRIMARY KEY (_id)
);

CREATE TABLE insurance (
_id INT(5) UNSIGNED AUTO_INCREMENT,
patient_id INT(5) UNSIGNED NOT NULL,
iname VARCHAR(40) DEFAULT NULL,
from_date DATE DEFAULT NULL,
to_date DATE DEFAULT NULL,
PRIMARY KEY (patient_id),
CONSTRAINT fk_insurance FOREIGN KEY (patient_id)
REFERENCES patient(_id)
);

它给了我ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key,我不知道如何解决这个问题。我是这方面的初学者,我需要帮助,谢谢。

【问题讨论】:

  • 答案在留言中。
  • 它不一定是主键,但它必须是一个键。
  • 但是你为什么不想用它作为主键呢? _id 列的目的是什么?将 patient_id 设为唯一列。
  • 我也不知道,我刚刚获得了这个架构用于我的作业:(

标签: mysql sql auto-increment create-table


【解决方案1】:

考虑:

CREATE TABLE insurance (
    _id INT(5) UNSIGNED AUTO_INCREMENT,
    patient_id INT(5) UNSIGNED NOT NULL,
    iname VARCHAR(40) DEFAULT NULL,
    from_date DATE DEFAULT NULL,
    to_date DATE DEFAULT NULL,
    PRIMARY KEY (patient_id),
    KEY(_id),
    CONSTRAINT fk_insurance FOREIGN KEY (patient_id)
    REFERENCES patient(_id)
);

也就是说,自动递增的列必须至少是key。如果您愿意,您仍然可以使用另一列作为主键。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2011-11-12
    • 2020-01-15
    • 2011-09-02
    相关资源
    最近更新 更多