2

これは私の最後のバージョンよりも明確だと思います:

自動インクリメント用に設定された 1 で始まる PK フィールドが既にあるテーブルがあります。1 で始まらない新しいフィールドを追加したいと思います。代わりに、任意の数字 (請求書番号と考えてください) で始まり、自動的にインクリメントされます。どうやら、その属性を持つテーブルごとに 1 つの列しか持つことができません。1 つのクエリ操作で、MySQL にそのフィールドの最後の (または最大) 値を新しい行のその列の値として 1 ずつインクリメントさせる方法はありますか?

更新:必要な新しい値のベースとして id 列を使用することになり、重要でない列を削除しました。私の質問は本当に答えられませんでしたが、アプローチを再考するためのヒントとしてそれを取り入れました。

4

4 に答える 4

1

これは実際には特定の質問に対する答えではありません (1 つの SQL ステートメント内で目標を達成する方法を尋ねているため) が、シーケンス生成関数を呼び出して 2 番目の列にデータを入力するテーブルにトリガーを定義できます。これにより、関数の呼び出しがキューに入れられるため、この列の値が真に一意になることが保証されます (max(value) などを実行している場合はそうではありません)。

または、同じ値を表示する 2 つの列が本当に必要な場合は、同じ列を異なるエイリアスで 2 回参照するビューを作成します。

于 2009-10-07T20:17:33.410 に答える
1

同じ値を持つ 2 つの列を持つのはばかげているように思えますが、これで終わりです。

create trigger foo_before_insert 
  before insert on my_table
  for each row set
  new.second_auto_column = first_auto_column
;
于 2009-10-07T20:19:16.980 に答える
0

同じテーブルにある場合は、必要な列を一意の列に設定できますが、それらは同じ値になり、無意味に見えます>本当にこれが必要ですか?

于 2009-10-07T20:17:47.887 に答える
0

フィールドの目的を教えていただければ、回答が容易になります。通常、同じビジネス要件を達成するためのより良い方法があります。何をしようとハッキングになり、意図しない結果に対処するために多くの時間を費やすことになります。

于 2009-10-07T20:19:55.370 に答える