0

PDO の SQL クエリで次の ID を知るにはどうすればよいですか? 私はテスト$sql->lastInsertId()しましSELECT LAST_INSERT_ID() FROM my_tableたが、それらによると、最後のIDがテーブルで66の場合、最後のIDは116です。

前もって感謝します!

4

4 に答える 4

1

考えを変えるよう説得したいと思います:

  • 次のID を知りたいと思うべきではありません
  • 次に何が起こるかを知る方法はありません。

id は単なる抽象的な値であり、偶然にも数値に似ています。その目的はユニークであることです。これは、値を再利用する必要がないことを意味します。そのため、常に新しい ID である必要があります。

これが、データベースが 66 ではなく 116 にする
理由です。66 にするのではなく、116 に満足する必要があるのはそのためです。

lastInsertId()との両方SELECT LAST_INSERT_ID()が正しい値であることが保証されていることは言うまでもありませんが、使用しないことを示唆する受け入れられた答えは受け入れられてmax(lastID)います。

于 2013-03-16T07:21:29.870 に答える
1

LAST_INSERT_ID()自動インクリメントで挿入された最後の ID を返します。実際にはそれ以降、レコードを削除することができました (おそらく 67 から 116 までのすべて) が、これは自動インクリメント位置を変更せず、次の ID は 117 になります。

テーブル内の最大の ID を知りたい場合は、それSELECT max(id) FROM tableが役に立ちます。

于 2013-03-15T22:04:41.830 に答える
0

ID列に自動インクリメントがある場合、次のIDは常にではありませんlast item's ID + 1。したがって、2 つの要素 (ID 1 と 2) を挿入し、2 番目の要素を削除して新しい要素を再度挿入すると、その ID は 2 ではなく 3 になりますが、DB エンジンにも依存します。

ただし、最後のアイテムの ID を取得する場合は、たとえば、ID の降順で列を並べ替え、最初のアイテムの ID を選択します。

于 2013-03-15T22:03:48.477 に答える
-1

動作しますかselect max(lastID) from my_table?(最後に作成された ID を含む列名が lastID と呼ばれると仮定します)

于 2013-03-15T22:01:50.963 に答える