首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的组合主键

MySQL中的组合主键
EN

Stack Overflow用户
提问于 2013-04-11 22:42:18
回答 3查看 186关注 0票数 0

这听起来可能有点傻--但我想设置以下场景:

代码语言:javascript
复制
ClientID,AdvertID  
  1,1  
  2,1  
  3,1  
  2,2  
  2,3  
  1,2  

因此,ClientID和AdvertID都必须是主键,但只有AdvertID是自动增量的。AdvertID必须重新开始与它所链接的ClientID相关的编号。此外,ClientID也将是一个外键。

到目前为止,我所做的只是在PHPMyAdmin中创建表时创建了一个组合主键,但这只是继续自动增量值,而不考虑实际的clientID

有人知道怎么做吗?我知道这是可能的,我以前见过。我只是不知道它是怎么做到的。

提前感谢!

附言:为了清楚起见,这是针对MySQL v5.5的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 22:48:39

代码语言:javascript
复制
LOCK TABLES tbl WRITE;

select AdvertID from tbl where ClientID = :c_id //save the number somewhere

insert into tbl (ClientID, AdvertID) value (:c_id, :saved_ad_id+1)

UNLOCK TABLES

首先,获得对表的独占写访问权限(只是为了确保避免竞争条件)

然后,搜索您客户端的当前广告值,如有必要,将null转换为0,然后将其增加+1

第三步,将这对情侣保存在数据库中

最后,解锁表。

不需要自动递增字段,因为此表中没有真正的自动递增字段。

票数 1
EN

Stack Overflow用户

发布于 2013-04-11 22:45:07

据我所知,你不能设计一个结构来关心值何时应该根据它的父键重新开始递增。它依赖于您的服务器端逻辑(在本例中为PHP),无论何时接收到新的ClientID,都会生成相关的案例,以便从头开始填充AdvertID。

票数 0
EN

Stack Overflow用户

发布于 2013-04-11 22:48:39

我能想到的唯一一件事就是一个before insert触发器,它为你的键执行自动计数逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15951739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档