这可能听起来有些愚蠢 - 但我想设置以下场景:
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的
答案 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)
我唯一能想到的就是插入触发器,它可以为你的按键执行自动计数逻辑。