7

MySQL 5 サーバーと、その中に id フィールド (主キー) の自動インクリメントを持つテーブルがあります。ここで、間にレコードを追加したいので、他のすべての ID を 1 ずつ増やす必要があります。これは私が試したものです:

UPDATE myTable SET id=id+1 WHERE id >= 53

たとえば、id = 52 のレコードが既に存在するため、これは機能しません。これどうやってするの?彼が最後のエントリから始めて更新を行うなら、うまくいくはずです。しかし、どのように?

4

4 に答える 4

14

これには正当な理由がありません。問題のみ。次のステートメントを実行する前に、FOREIGNthis を参照するキーが定義されているかどうかを確認してくださいid。に設定されていON UPDATE CASCADEますか? また、この表に関連するトリガーはありますか?

しかし、最初に考えてみてください。なぜこれが必要なのですか。テーブルの注文に使用されますか?その場合、@Mark が指摘したように、別の列を使用して目的の順序を指定する必要があります。


ただし、これが本当に必要であると判断した場合は、次を使用します。

UPDATE myTable 
SET id = id + 1 
WHERE id >= 53
ORDER BY id DESC  ;
于 2012-04-06T12:47:09.837 に答える
6

クイックとダーティの 2 つのステップでそれを行います。

  • id を他のすべてよりも大きい数値に増やします
  • すべてのIDを必要な数に減らします

そのように

UPDATE myTable SET id=id+10000 WHERE id >= 53
UPDATE myTable SET id=id-9999 WHERE id >= 53
于 2012-04-06T12:42:38.150 に答える
0

私は同じ問題に直面していました。また、OP および @Romain Hoog によるクエリも試しました。しかし、成功しませんでした。

最後に、テーブル全体のデータを Excel でエクスポートし、Excel で実行しました (1 つずつではなく、非常に高速にするトリックを使用しています)。

次に、元のテーブルのバックアップを取り、新しいテーブルを再作成し、更新された Excel からデータをインポートしました。

于 2012-04-06T12:41:55.530 に答える
0

私はそのようなものがうまくいくと思います:

UPDATE myTable SET id=id+1 WHERE id >= (select id from myTable order by id DESC)
于 2012-04-06T12:38:45.443 に答える