ここには事があります:外部キーが重複しないようにMySQLナチュラルキーを更新するにはどうすればよいですか?
私はjQuery/php/mysqlで構築されたWebアプリケーションを持っています。タスクマネージャのようなものです。カテゴリに属するカテゴリとタスクがあります。 (id_category、position)
ユーザーがタスクを動かすと、位置(ajaxリクエスト)を更新する必要があります。この場合、タスクはサロゲートプライマリキー(自動インクリメントID)を持ち、データベースの一貫性はユニークです。 DB内のこのタスクの変更だけでなく、変更に関係する他のすべてのタスクの位置も示します。たとえば、位置5のタスクを位置2に移動すると、位置4〜2のタスクの位置が1つ増える必要があります。 (これは私のアプローチです;特定のカテゴリのタスクを新しいポジションで送信する人もいますが、必要なものだけを更新しようとしています)
問題は分かりませんどのように私は自然なキーの重複エラーを回避することなく、タスクの位置を更新する方法を/私は同時にすべてを更新する方法を知らない/できません。
あなたは私にそれを手伝ってもらえますか、私のアプローチを変えるべきでしょうか。ユニークインデックス(自然キー)を削除するだけで、データベースの一貫性のメカニズムがあります。
ありがとうございました。
なぜautoincキーがあるときにナチュラルキーが必要ですか?それは何の目的ですか? –
あなたの例では、次のようなことができます: 'UPDATE table SET position = -1 WHERE position = 5; UPDATEテーブルSET position = position + 1 WHERE position <5 AND position> 1; UPDATEテーブルのSET位置= 2 WHERE position = -1'(-1は使用されない位置を仮定) – NullUserException
@TobyAllenデータベースの一貫性。 2つのタスクは同じカテゴリの同じ位置にあることはできません。私がいくつかの条件を確認しなかったので、私はアプリを構築していたときに何度か起こった。 – Amida