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 増やします

3 番目のステップ、カップルをデータベースに保存する

最後に、テーブルのロックを解除します。

このテーブルには REAL 自動インクリメント フィールドがないため、自動インクリメント フィールドは必要ありません。

于 2013-04-11T14:48:39.410 に答える
0

私が想像できる唯一のことは、キーの自動カウント ロジックを実行する before insert トリガーです。

于 2013-04-11T14:48:38.530 に答える