0

列の最大値を識別し、挿入されるレコードに対してそれを 1 ずつインクリメントする単一の MySQL 挿入クエリを作成しようとしています。テーブルを作成したときに、このフィールドを auto_increment に設定したと思ったのですが、何らかの理由で機能しません。私の現在の挿入ステートメントは次のとおりです。

INSERT INTO victoria (name, album, order_by) VALUES (:name, :album, :order)

order_by フィールドは、1 ずつインクリメントする必要があるフィールドです。

4

1 に答える 1

1

何らかの理由で、列を使用せずに列の値を増やしたい場合は、次のauto_incrementようなことができます

INSERT INTO victoria 
SELECT :name, :album, 
       COALESCE((SELECT MAX(order_by) FROM victoria), 0) + 1;

注: 負荷が高い場合は個別の値を提供できない場合があります。つまり、複数の同時ユーザーが同時に行を挿入すると、同じMAX(order_by)値を取得できます。したがって、後で行を「並べ替える」予定がない場合は、列に固執することをお勧めしauto_incrementます。

これがSQLFiddleのデモです

于 2013-09-16T04:12:44.233 に答える