次のモデルのフリープライマリキーを知るにはどうすればよいですか?次に利用可能なプライマリキーをモデル化する
答えて
次の使用可能なプライマリキーの値を照会できても、それは役に立ちません。テーブルをロックしない限り、他のデータベースクライアントが挿入する前にその値を使用することはできません。
代わりに、行を挿入するだけで、最新のキー値がにクエリできます。自動生成された主キーをサポートするすべてのデータベースは、セッション中に挿入された最新のキーを取得する方法を提供します。
「セッション中」の部分は、セッションが他のクライアントによって同時に実行されないようにするため、重要です。彼らはキー値を生成することができ、あなたのセッションは同じ値を報告し続けますそれは最後に挿入されたです。
@Stuart Childs supposes MySQLはMAX(column_name)+1
で次のIDを生成しますが、これは間違っています。行を挿入し、ID値が生成されたとします。しかし、この挿入をロールバックするか、その後にその行DELETE
をロールバックします。次に挿入すると、MySQLはまったく新しいID値を生成します。したがって、ID値は、どのクライアントによってもによって生成された最後のID値より1大きい値になります。テーブルに現在格納されている行に関係なく。
同様に、挿入してもすぐにコミットしないとします。コミットする前に、他のクライアントが挿入を行います。あなたのセッションと他のクライアントのセッションは、それぞれ固有のID値が生成されます。自動生成された主キーは、一意性を保証するために、トランザクション分離に関係なく動作します。
自動生成された主キー値は、まだ挿入をコミットしていない場合、または挿入をロールバックした場合、または行を削除した場合でも、複数のセッションに再使用または割り当てられません。
custom SQLを実行する必要があると思います。必要なSQLはDB固有のものになります。私が知る限り、MySQLでこれを行う信頼できる方法はありません。最後の挿入IDは取得できますが、セッション固有です(DBセッションに挿入した最後のレコードのIDは取得できますが、その後に発生した別のセッションのIDは取得できません)。
しかし、(私が間違っていれば誰かが私を修正します)、MySQLはMAX(column_name)+ 1で次のIDを生成します。
PostgreSQLでは、sequence manipulation functionsを使用するとかなり簡単になります。
編集:
は私がしているはMAX(column_nameに)1で生成されたmulti-column key内AUTO_INCREMENT
列を考えていたが判明。しかし、この点は依然として、の前に次のIDを検索する方法がないことを示しています。これは元の質問である挿入物によって生成されます。
なし、IDはMAX(COLUMN_NAME)+1ない.ID。 –
はい、そうです。私はそれを行うマルチユーザーDBのためにかなりbraindeadだろうので、私はチェックしておく必要があります。 –
私は要素を複製していたので、これは同じ質問だったので、その要素を挿入できるように新しい要素を変更したかったのです。私が意味する
import copy
objectCopy=copy.copy(object)
objectCopy.pk=None
objectCopy.save()
、save()
は、あなたのためにそれをしない理由は、あなたがそれを手動で行いたいならば、次のように
私のソリューションでしたか?
thisスニペットが必ずお手伝いします。
-UsingジャンゴとMySQL
NEXT_ID = Table.objects.filter(id__gt = current_id)[0]
- 1. 次利用可能なID
- 2. UMLで利用可能なVLAN IDのプールをモデル化する方法
- 3. 次の利用可能なオートナンバーを取得する
- 4. 利用可能なフィルタリング利用可能なタスクグループ別のギャラリストタスク
- 5. 次の利用可能な日付を返すSQLite Entity Frameworkクエリ
- 6. 電話機モデルの利用可能なメモリ(ヒープ)を確認するには
- 7. WPFオブジェクトをインスタンス化して利用可能にする
- 8. SF3:再利用可能なバンドルとモデルの更新
- 9. 再利用可能なアクティビティに戻る
- 10. VB.NETは次の利用可能なドライブレターを取得
- 11. Java - 利用可能なガベージコレクションアルゴリズム
- 12. 再利用可能なコントロール
- 13. 再利用可能なプリプロセッサ__COUNTER__
- 14. 再利用可能なコンポーネント
- 15. 利用可能なCRANビネット
- 16. 再利用可能なリモートモーダルレール
- 17. 再利用可能な、
- 18. 利用可能なデータ
- 19. 再利用可能なコンポーネント
- 20. 再利用可能なビュー?
- 21. ネットワークで利用可能なCPU時間を利用する
- 22. コントローラーとモデル用に再利用可能なコードを置く場所
- 23. eclipseで利用可能な次のソースへステップを実行するには?
- 24. 再利用可能なコードを作る
- 25. 利用可能なロケールのサブセットでアクセサーをグローバル化
- 26. Ruby:レール3モデルですべての利用可能な年を得る方法
- 27. jQueryタブ - 再利用可能な次/前のボタンの追加
- 28. 次の利用可能なJTextFieldに設定するボタンの値は?
- 29. タイプセーフアクティベータが利用可能なコマンドラインオプション/機能
- 30. 常に利用可能なパブリックフォルダ
ああ、豊富な知識。 –
うわー、このような詳細な説明に感謝します。 – user20955