0

我有如下表

个人信息

CREATE TABLE personalInfo(userid BIGINT AUTO_INCREMENT PRIMARY KEY)

专利信息

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.

我想做的是为用户添加专利。所以我试图使用patentIdasAUTO_INCREMENT并保持 compiste 主键作为patentId&的组合userid

知道我该怎么做吗?

更新1:

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

4

4 回答 4

1

既然patentIdAUTO_INCREMENT,那么它应该是主键。

于 2012-07-04T09:57:41.783 回答
1

我会改用一个Person——user假设你有一个诊所......

  • Patient是一个Person
  • Doctor是一个Person
  • Doctor也可能成为(是)一个Patient

在此处输入图像描述

  • 保留所有常见的个人信息Person
  • 只有患者特定的列Patient
  • 只有医生具体Doctor
  • 子类型是包容性的,所以鉴别器有 {B= both}
  • 请注意主键如何传播到子类型表中。

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

于 2012-07-04T12:32:28.903 回答
0

您不必在一个表中自动增加值。所以您必须使用 last_insert_id() 或类似的东西在代码级别手动插入用户 ID,而不是在数据库级别执行此操作

于 2012-07-04T09:57:20.117 回答
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 上测试

于 2013-03-30T19:54:23.767 回答