3

これが事です:

jQuery/php/mysql で構築された webapp があります。タスクマネージャーのようなものです。カテゴリとカテゴリに属する​​タスクがあります。タスクには代理主キー (Autoincrement id) があり、データベースの一貫性のために、次のような自然キー (Unique) があります: (id_category, position)

ユーザーがタスクを移動すると、DB 内のこのタスクの位置 (ajax リクエスト) を更新する必要がありますが、変更に関係する他のすべてのタスクの位置も更新する必要があります。たとえば、位置が 5 の特定のタスクを位置 2 に移動する場合、位置が 4 から 2 のタスクの位置を 1 つ上げる必要があります。(これは私のアプローチです。特定のカテゴリのタスクのセット全体を新しいポジションで送信する人がいることは知っていますが、必要なものだけを更新しようとしています)

問題は、すべてを同時に更新する方法がわからない/できないため、自然キーの重複エラーを回避せずにタスクの位置を更新する方法がわからないことです。

それで、あなたはそれで私を助けてくれますか、それとも私のアプローチを変えるべきでしょうか. 一意のインデックス (自然キー) を削除することもできますが、データベースの一貫性メカニズムは何かのために存在します...

助けてくれてありがとう。

4

1 に答える 1

1
BEGIN TRANSACTION;
SET UNIQUE_CHECKS=0;
-- update 1
-- update 2
SET UNIQUE_CHECKS=1; 
COMMIT;

やるべきです。

于 2012-03-28T18:55:18.950 に答える