0

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

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

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

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

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

提前致谢!

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

4

3 回答 3

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

第三步,将情侣存入数据库

最后,解锁表。

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

于 2013-04-11T14:48:39.410 回答
0

据我所知,您无法设计一个结构来处理值何时应根据其父键重新开始递增。每当收到新的 ClientID 时,它取决于您的服务器端逻辑(在您的情况下为 PHP)制作相关案例,从头开始填充 AdvertID。

于 2013-04-11T14:45:07.420 回答
0

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

于 2013-04-11T14:48:38.530 回答