0

複合主キーを持つデータベース テーブルがあります(id_a, id_b)。それは彼らが実際に呼んでいるものではありませんが、私はこの質問のために単純化しています. id_aは外部キーであり、id_b単なる整数、いわば「シーケンス番号」です。id_bauto_incrementingを作成することはできません。これは、InnoDB ストレージ エンジンでは許可されていないためです (複合キーの最初のフィールドではないため)。

これらのオブジェクトを で「グループ化」できるようにしたいと思いますid_a。たとえば、次のようになります。

id_a    id_b
----------------
1       1
1       2
2       1
2       2
2       3

() で行を挿入した結果は、id_a=1自動的に設定されid_b=3ます。データベース ロックの使用は避けたいと思います。特に、複数の同時挿入をid_a完全に許可する必要がある場合に、テーブル全体をロックする必要がないためです。

私はSQLAlchemyを介して(ORMを使用して)Pythonを介してこのデータベースにアクセスしていますが、この質問はクライアント側(純粋なMySQL)に関して不可知論的に答えることができると思います。

4

1 に答える 1

1

SELECT coalesce(max(ID_B),0)+1 FROM yourTable WHERE ID_A = '1'

ただし、ロックがないと、ID_B 値が重複するリスクがあるため、insert ステートメントで重複キー エラーを処理する必要があります。設定された回数またはエラーに対してコード内で自動的に「再試行」し、ユーザーに再試行を強制します。

于 2012-06-10T18:58:11.607 に答える