問題は、LAST_INSERT_ID(...);
です。 引数を指定すると、生成されたIDは返されませんが、代わりにLAST_INSERT_ID()
の「メモリ」に指定された値が設定されます。 そしてそれを返します。したがって、最初の実行では、自動インクリメントされたIDは生成されず(値は自分で指定しました)、LAST_INSERT_ID()
0
を返します 。次の実行では、値next+1
を保存します LAST_INSERT_ID()
の内部ストレージ内 、値を返します。この動作は、MySQLの12.14情報機能
:
実際、LAST_INSERT_ID()
はスキップできます 電話して、それなしで作業します。
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
これにより、(指定された値の)行が挿入されるか、カウンターが増加します。
特定の年と月の現在のカウンターが必要な場合は、単純なSELECTステートメントを実行します。 SELECTステートメントでフェッチする前に別のクライアントがカウンターを増やす可能性があるため、トランザクションまたはロックが必要になる場合があることに注意してください。