MySQL中的组合主键

时间:2013-04-11 14:42:18

标签: php mysql primary-key composite-primary-key

这可能听起来有些愚蠢 - 但我想设置以下场景:

ClientID,AdvertID  
  1,1  
  2,1  
  3,1  
  2,2  
  2,3  
  1,2  

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

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

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

提前致谢!

P.S:要明确的是,这是针对MySQL v5.5的

3 个答案:

答案 0 :(得分:1)

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

第三步,将这对夫妇保存在数据库中

最后,解锁桌子。

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

答案 1 :(得分:0)

据我所知,你不能设计一个结构,它将在值根据其父键重新开始递增时进行处理。这取决于您的服务器端逻辑(在您的情况下为PHP),以便在收到新的ClientID时发出相关案例,从头开始填充广告ID。

答案 2 :(得分:0)

我唯一能想到的就是插入触发器,它可以为你的按键执行自动计数逻辑。