复合键中的AUTO_INCREMENT

时间:2012-07-04 09:54:01

标签: mysql database-design auto-increment composite-key

我的表格如下

personalInfo

CREATE TABLE personalInfo(userid BIGINT AUTO_INCREMENT PRIMARY KEY)

patentInfo

CREATE TABLE patentInfo 
(
 userid BIGINT,
 patentId BIGINT AUTO_INCREMENT,
 FOREIGN KEY (userid) REFERENCES personalInfo(userid), 
 PRIMARY KEY (userid,patentId)
)

创建表patentInfo时,我收到错误

Incorrect table definition; there can be only one auto column and it must be defined as a key.

我想要做的是为用户添加专利。因此,我尝试将patentId用作AUTO_INCREMENT,并将compiste主键保持为patentId&组合。 userid

知道如何完成这项工作?

更新1:

我的目标是,我不想在mysql查询中插入patentId。 mysql本身将创建下一个数字。

4 个答案:

答案 0 :(得分:1)

由于patentIdAUTO_INCREMENT,因此它应该是主键。

答案 1 :(得分:1)

我会使用Person代替user - 假设您有诊所......

  • PatientPerson
  • DoctorPerson
  • Doctor也可能成为({a})Patient

enter image description here

  • 将所有常见的个人信息保存在Person
  • Patient
  • 中的患者特定列
  • 只有Doctor
  • 中的医生
  • 子类型是包含的,因此鉴别符具有{B = both}
  • 请注意主键如何传播到子类型表中。

总而言之,对于您的具体示例,两个表都应以UserID作为主键。在第二个表中,它也是外键。

答案 2 :(得分:0)

您不必在一个表中自动增加值。所以你必须通过使用last_insert_id()或类似的东西,在代码级别手动插入userid表中的userid,而不是在db-level上执行此操作

答案 3 :(得分:0)

如果auto_increment列是主键的第一个子句,似乎你可以拥有一个带有一个auto_increment列的复合主键。

以下适用于我的机器

CREATE TABLE patentInfo 
(
  userid BIGINT,
  patentId BIGINT AUTO_INCREMENT,
  PRIMARY KEY (patentId, userid)
)

在哪里

PRIMARY KEY (userid, patentId)

给出了您看到的错误。

在MariaDB 10.0 YMMV上测试