这听起来可能有点傻--但我想设置以下场景:
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的
发布于 2013-04-11 22:48:39
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-11 22:45:07
据我所知,你不能设计一个结构来关心值何时应该根据它的父键重新开始递增。它依赖于您的服务器端逻辑(在本例中为PHP),无论何时接收到新的ClientID,都会生成相关的案例,以便从头开始填充AdvertID。
发布于 2013-04-11 22:48:39
我能想到的唯一一件事就是一个before insert触发器,它为你的键执行自动计数逻辑。
https://stackoverflow.com/questions/15951739
复制相似问题